您对存储库模式的理解是什么?

时间:2009-06-16 17:16:59

标签: language-agnostic design-patterns repository-pattern

我正在追赶几个月前完成的项目的技术文档,而且我即将完成。我使用存储库来抽象出两者中的数据访问层,并在我们的wiki上写了一个关于模式的简短摘要。

在撰写本摘要时,我意识到我第二次采用了略微不同的方法。

一个使用显式InsertOnSubmit方法,结合工作单元,并使用UoW跟踪更改进行隐式更新。另一个有Save方法插入新条目并更新现有(没有UoW)。

您通常会采用哪种方法?考虑通常的CRUD场景,每个场景的响应能力应该在哪里?

1 个答案:

答案 0 :(得分:3)

我认为存储库是否使用工作单元,缓存或任何其他相关概念应留给实现。我更喜欢接口类似于与手头的域模型对齐的数据存储。因此,客户存储库看起来像这样:

interface ICustomerRepository
{
    Customer Load(int id);
    IEnumerable<Customer> Search(CustomerQuery q);
    void Save(Customer c);
    void Delete(Customer c);
}

这可以通过NHibernate,NHibernate和NHibernate.Linq,直接SQL库,甚至是XML或平面文件存储来轻松实现。如果可能的话,我喜欢将事务的概念保留在存储库之外,或者在更全局的范围内,以便多个存储库的操作可能是单个事务的一部分。