我正在追赶几个月前完成的项目的技术文档,而且我即将完成。我使用存储库来抽象出两者中的数据访问层,并在我们的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和NHibernate.Linq,直接SQL库,甚至是XML或平面文件存储来轻松实现。如果可能的话,我喜欢将事务的概念保留在存储库之外,或者在更全局的范围内,以便多个存储库的操作可能是单个事务的一部分。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top