我正在追赶几个月前完成的项目的技术文档,而且我即将完成。我使用存储库来抽象出两者中的数据访问层,并在我们的wiki上写了一个关于模式的简短摘要。
在撰写本摘要时,我意识到我第二次采用了略微不同的方法。
一个使用显式InsertOnSubmit
方法,结合工作单元,并使用UoW跟踪更改进行隐式更新。另一个有Save
方法插入新条目并更新现有(没有UoW)。
您通常会采用哪种方法?考虑通常的CRUD场景,每个场景的响应能力应该在哪里?
答案 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或平面文件存储来轻松实现。如果可能的话,我喜欢将事务的概念保留在存储库之外,或者在更全局的范围内,以便多个存储库的操作可能是单个事务的一部分。