使用存储库设计模式组织类

mat*_*uma 6 design-patterns repository-pattern

我已经开始升级我们的一个内部软件应用程序,用ASP.NET Web Forms编写,然后转移到ASP.NET MVC.

我正在尝试为我的类利用Repository设计模式,这让我想到了有关放入存储库的数量的问题.

我有以下实体:

  • 话题
  • 主题评论(主题可以有多个评论)
  • 主题修订(任何时候编辑主题,记录修订)
  • 主题订阅(允许用户订阅特定主题的更改)

我目前有一个ITopicRepository接口和一个名为TopicRepository的类,它处理主题的所有基本CRUD.我现在正准备为评论,修订和订阅添加代码.

我想知道这一切都进入了TopicRepository还是我为每个实体创建了一个存储库,例如TopicRevisionRepository等等.

Jas*_*rue 8

平均MVC数据访问策略与域驱动设计对存储库模式的理解之间存在相当大的差异.

您将在ASP.Net MVC中看到的大多数示例只是在ActiveRecord之外的一小步,每个实体使用Repository对象.他们实际实现的是一种表数据网关,并使用Repository而不是Gateway.

对于许多应用程序来说没有什么问题,我通常用相同的方法开始新的应用程序,直到我可以证明我需要不同的东西.但是,域驱动设计原则(通常借用存储库的概念)可以让您识别聚合根并通过聚合根的存储库合并这些子实体的数据访问.这允许您在数据存储中围绕状态更改设置边界,并且可以帮助强制执行事务更改等.

编辑添加:在您的示例中,您似乎不太可能独立于父级修改任何这些子对象,因此我很想说"主题"是您域的聚合根.