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

时间:2010-07-02 13:59:47

标签: c# repository unit-of-work

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

interface IUnitOfWork<TEntity>
{
    void RegisterNew(TEntity entity);
    void RegisterDirty(TEntity entity);
    void RegisterDeleted(TEntity entity);

    void Commit();
    void Rollback();
}

interface IRepository<TKey, TEntity>
{
    TEntity FindById(TKey id);
    IEnumerable<TEntity> FindAll();

    void Add(TEntity entity);
    void Update(TEntity entity);
    void Delete(TEntity entity);
}

class Repository : IRepository<int, string>
{
    public Repository(IUnitOfWork<string> context)
    {
        this.context = context;
    }

    private IUnitOfWork<string> 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界面的一部分?

1 个答案:

答案 0 :(得分:4)

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

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

  

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

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