我正在赶上几个月前完成的一个项目的技术文档,而我即将完成的一个项目。我使用存储库来抽象出两者中的数据访问层,并在工作中在我们的 wiki 上编写模式的简短摘要。
正是在写这篇总结的时候,我意识到我第二次采取了一种稍微不同的方法。
一种方法是使用InsertOnSubmit
与工作单元相结合的显式方法,并使用 UoW 跟踪更改进行隐式更新。另一个有一种Save
插入新条目并更新现有条目的方法(没有 UoW)。
您通常倾向于哪种方法?考虑通常的 CRUD 场景,每个场景的责任应该在哪里?
我正在赶上几个月前完成的一个项目的技术文档,而我即将完成的一个项目。我使用存储库来抽象出两者中的数据访问层,并在工作中在我们的 wiki 上编写模式的简短摘要。
正是在写这篇总结的时候,我意识到我第二次采取了一种稍微不同的方法。
一种方法是使用InsertOnSubmit
与工作单元相结合的显式方法,并使用 UoW 跟踪更改进行隐式更新。另一个有一种Save
插入新条目并更新现有条目的方法(没有 UoW)。
您通常倾向于哪种方法?考虑通常的 CRUD 场景,每个场景的责任应该在哪里?
我认为存储库是否使用工作单元、缓存或任何其他相关概念应该留给实现。我更喜欢界面类似于与手头的域模型对齐的数据存储。所以客户存储库看起来像这样:
interface ICustomerRepository
{
Customer Load(int id);
IEnumerable<Customer> Search(CustomerQuery q);
void Save(Customer c);
void Delete(Customer c);
}
这可以通过 NHibernate 或带有 NHibernate.Linq 的 NHibernate 或直接 SQL 库,甚至是 XML 或平面文件存储来轻松实现。如果可能的话,我喜欢将事务的概念保留在存储库之外,或者在更全局的范围内,以便多个存储库的操作可以成为单个事务的一部分。