存储库和工作单元 – 负责什么?

在过去一周左右的时间里,我一直在阅读很多关于存储库模式的文章和教程。 许多文章将存储库模式与工作模式单元紧密联系在一起。 在这些文章中,我通常会找到与此类似的代码:

interface IUnitOfWork { void RegisterNew(TEntity entity); void RegisterDirty(TEntity entity); void RegisterDeleted(TEntity entity); void Commit(); void Rollback(); } interface IRepository { TEntity FindById(TKey id); IEnumerable FindAll(); void Add(TEntity entity); void Update(TEntity entity); void Delete(TEntity entity); } class Repository : IRepository { public Repository(IUnitOfWork context) { this.context = context; } private IUnitOfWork context; public void Add(string entity) { context.RegisterNew(entity); } public void Update(string entity) { context.RegisterDirty(entity); } public void Delete(string entity) { context.RegisterDeleted(entity); } /* Entity retrieval methods */ } 

我是否正确理解工作单元对象是为了处理底层数据存储中的任何对象的添加,更新或删除(在我的例子中,是我通过LDAP与之通信的目录服务)? 如果这是真的,它不应该处理任何对象的检索吗? 为什么这不是建议的UoW界面的一部分?

Repository负责数据 – 获取,更新和其他CRUD操作,提供持久性无知。

正如Marin Fowler所说, Unit Of Work (uow):

维护受业务事务影响的对象列表,并协调写入更改和并发问题的解决方案。

uow将协调对象的多个操作 – 它可能会也可能不会使用存储库来持久保存这些更改。