1

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

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

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

您通常倾向于哪种方法?考虑通常的 CRUD 场景,每个场景的责任应该在哪里?

4

1 回答 1

3

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

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 或平面文件存储来轻松实现。如果可能的话,我喜欢将事务的概念保留在存储库之外,或者在更全局的范围内,以便多个存储库的操作可以成为单个事务的一部分。

于 2009-06-16T17:35:27.343 回答