我在互联网上看到了很多具有以下或类似签名的Repository模式示例:
public void IRepository<T>
{
void Insert(T object);
void Update(T object);
void Delete(T object);
T GetById(int id);
IEnumerable<T> GetAll();
}
让我困惑的是,为什么CUD元素是Repository模式的一部分?根据Martin Fowler的说法,CUD操作应该是工作单元模式的一部分。
多年来,我一直在EF中使用Fowler方法,效果非常好。我认为它与任何其他ORM都可以正常工作。
我很感兴趣的是,如果有人能从体系结构和逻辑的角度解释,为什么我们要把CUD操作放在Repository模式中?很明显,这两种方法都有效,但我们为什么要做一种而不是另一种呢?福勒的风格不是更符合CQRS的精神吗?
如您提供的链接中所述,工作单元跟踪数据库中要更改的内容。它保持跟踪,不更新。最后,它计算出了由于您的工作而需要更改数据库的所有操作(引用您的链接)。提交工作单元可以归结为调用(通常是几个)存储库来一次性执行实际的CUD操作