更有意义的是什么。使服务层引用多个存储库(充当外观),或将存储库组多个相关实体组合在一起。例如,我有以下实体,我不知道如何构建事物。
实体(POCO)
Q1。这些实体是否都有自己的存储库?如果不在SurveyGroup中,SurveyQuestion就不可能存在,并且SurveyGroup不能在没有调查的情况下存在。
Q2。我应该为Survey,SurveyGroup和SurveyQuestion创建一个存储库,还为SurveyAnswers创建一个存储库?
Q3。我应该为每个存储库创建一个单独的存储库并创建一个引用它们的服务类(SurveyService)吗?
我不确定这样的事情被认为是“最佳做法”。
答案 0 :(得分:4)
DDD的一般经验法则是为每个Aggregate Root创建一个存储库。
在您的示例中,看起来Survey
将是聚合根,因此请创建SurveyRepository
。
答案 1 :(得分:1)
经验法则(即标准)是拥有具有身份的实体(例如主键)的存储库。换句话说,此类实体可以[至少]在他们自己的存储库中定义CRUD操作。
对于不是“first-class”实体并且不能自己定义CRUD的实体,不需要存储库。因此,必须使用依赖关系映射来处理它们(其他“第一类”实体映射会处理它们)。
但是,您可能希望减少项目中的存储库数量,并且当您开始考虑替代(非标准)方法来对实体进行分组时。
结论:如果您想成为标准版,请拥有与您拥有的许多自包含实体一样多的存储库。具体答案取决于您问题中列出的实体,我认为您可以自己判断手头有这些信息。
以前的答案可能[理论上]导致存储库不必要地处理多个实体,以及将来查找/定位实体处理/映射代码的麻烦。
[我使用Fowler定义的术语,M。 - 身份,依赖关系映射]