具有多个表的存储库模式

Ste*_*726 4 c# dependency-injection repository-pattern

最近我一直在阅读使用存储库模式和DI来帮助创建易于测试的代码,我想我在很大程度上理解它.但是我遇到一个问题很困难.我需要为我的应用程序业务层创建一个Rules对象.要创建规则,我需要能够读取和写入两个表.您将如何实现为一个对象使用两个表的存储库?

例如:

ICollection<type> GetAllRules();
Run Code Online (Sandbox Code Playgroud)

我需要为类型添加什么,因为它需要两个表?

谢谢

史蒂夫

Wik*_*hla 6

我不会坚持要有一个存储库.

正如福勒所说

从概念上讲,存储库封装了持久存储在数据存储中的对象集以及对它们执行的操作,从而提供了更加面向对象的持久层视图.

这可能是大多数实现倾向于暴露纯域对象而不是衍生物(您的Rule对象似乎是)的原因.

对于你提到的两个表,我会有两个存储库,然后我会有一个工作单元来公开所有存储库,然后我会有一个负责复合处理的业务层服务.

这种方法的一个优点是存储库层保持干净,这里不涉及业务处理,没有不明确的规则引入持久层.

  • 看看工作单元是如何工作的。您有两个可用的存储库,这允许您在两者上编写查询。根据您是否要公开通用 IQueryable 或特定方法,检索数据的方式可能略有不同。有可用的教程之一 http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-the-repository-and-unit-of-work-patterns-in-一个-asp-net-mvc-应用程序 (2认同)