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

Language agnostic 您对存储库模式的理解是什么?,language-agnostic,design-patterns,repository-pattern,Language Agnostic,Design Patterns,Repository Pattern,我正在为几个月前完成的一个项目学习技术文档,这个项目即将完成。我使用存储库来抽象出两者中的数据访问层,并在我们的wiki上编写了一个简短的模式摘要 在写这篇总结的时候,我意识到第二次我采取了一种稍微不同的方法 其中一个使用了显式的InsertOnSubmit方法,并结合了工作单元和隐式更新以及UoW跟踪更改。另一个有Save方法,该方法插入新条目并更新现有条目(无UoW) 您通常喜欢哪种方法?考虑到通常的CRUD场景,它们每一个的响应应该在哪里?< P>我认为存储库是否使用工作单元、缓存或任何其

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

在写这篇总结的时候,我意识到第二次我采取了一种稍微不同的方法

其中一个使用了显式的
InsertOnSubmit
方法,并结合了工作单元和隐式更新以及UoW跟踪更改。另一个有
Save
方法,该方法插入新条目并更新现有条目(无UoW)


您通常喜欢哪种方法?考虑到通常的CRUD场景,它们每一个的响应应该在哪里?

< P>我认为存储库是否使用工作单元、缓存或任何其他相关概念应该留给实现。我更喜欢界面类似于与手头的域模型对齐的数据存储。因此,客户存储库的外观如下所示:

interface ICustomerRepository
{
    Customer Load(int id);
    IEnumerable<Customer> Search(CustomerQuery q);
    void Save(Customer c);
    void Delete(Customer c);
}
接口ICCustomerRepository
{
客户负载(int id);
IEnumerable搜索(CustomerQuery q);
作废保存(客户c);
作废删除(客户c);
}
这可以通过NHibernate、NHibernate和NHibernate.Linq、直接SQL库、甚至XML或平面文件存储等方式轻松实现。如果可能的话,我喜欢将事务的概念保留在存储库之外,或者保留在更全局的范围内,以便多个存储库的操作可能是单个事务的一部分