3

什么更有意义。让服务层引用多个存储库(充当外观),或者让存储库将多个相关实体组合在一起。例如,我有以下实体,但我不确定如何构建事物。

实体(POCO)

  1. 民意调查
  2. 调查组
  3. 调查问题
  4. 调查答案

Q1。 这些实体中的每一个都应该有自己的存储库吗?SurveyQuestion 不存在于调查组中,而调查组不存在于调查中。

Q2。 我应该为 Survey、SurveyGroup 和 SurveyQuestion 创建一个存储库,并为 SurveyAnswers 创建一个附加存储库吗?

Q3。我应该为每一个创建一个单独的存储库并创建一个引用它们的服务类(SurveyService)吗?

我不确定什么被认为是这样的“最佳实践”。

4

2 回答 2

4

DDD 中的一般经验法则是为每个Aggregate Root创建一个存储库。

在您的示例中,它看起来像是Survey聚合根,因此创建一个SurveyRepository.

于 2012-11-29T19:32:08.973 回答
1

经验法则(即标准)是为具有身份(例如主键)的实体提供存储库。换句话说,这些实体可以在他们自己的存储库中[至少]定义 CRUD 操作。

对于不是“一流”实体且不能自行定义 CRUD的实体,存储库不是必需的。因此,它们必须使用依赖映射来处理(其他“第一类”实体映射会处理它们)。

但是,您可能希望减少项目中的存储库数量,这就是您开始寻找对实体进行分组的替代(非标准)方法的时候。

结论:如果您想成为标准,请拥有与您拥有的自包含实体一样多的存储库。具体答案取决于您的问题中列出的实体,我认为您将能够自行判断手头有这些信息。

以前的答案可能 [理论上] 导致存储库不必要地处理多个实体,并且在将来查找/定位实体处理/映射代码时会很头疼。

[我使用了 Fowler, M. 定义的术语-身份依赖映射]

于 2012-11-29T20:21:16.670 回答