领域驱动设计中的仓储类

7

我正在尝试遵循DDD,我有一个Question类和一个Feedback类等其他类。 我想要能够计算问题的数量,反馈的数量以及许多被视为元操作的其他内容。

这样的“元”方法应该与属于该类的其他方法放在同一个仓库中,还是应该放在MetaRepository中,在那里您有不同的元方法,可以查询数据库(在这种情况下,所有类都将混合)?


2
哪种设计最符合您的领域? - blueberryfields
实际上,我认为两种方法都可以。这个还在白板上,所以我可以接受修改 :) 如果没有人告诉我该做什么,我会将元方法放在它们所属的类中。 - LuckyLuke
这两种方法都适用于您的领域吗?例如,问题/反馈可能是某种容器的一部分,例如文档或问卷。容器很可能知道它包含多少内容,以及什么内容,并且可能需要计数方法。 - blueberryfields
4个回答

9

在DDD中没有禁止为一个聚合使用多个存储库。您可以简单地拥有一个基本查询和生命周期方法的存储库(IQuestionsRepository),以及一个用于所谓的“元”或“统计”目的的单独存储库(IQuestionsStatistics)。在更大的领域中,遵循“每个聚合一个存储库”的原则可能会导致“方法爆炸”和SRP违规。遵循DDD不应违反基本的OOP原则。


1
对我来说,每个代码库都负责计算其元素,这是其中一个方法,包括 getById、getAll 等标准方法。

0

这些问题(“有多少反馈?”)以及它们所指的数量是否是您领域的重要组成部分?

如果是,它们似乎是合理的查询,可以放在您的存储库中。毕竟,您的存储库的工作是回答关于其包含的聚合物的领域相关问题。

如果不是,例如,如果这只是偶然的东西,可能仅用于向用户显示,则这些问题可能属于应用程序服务,完全位于领域层之外。


0

我会坚持每个领域模型类使用一个单一的代码库,或者使用一个通用的代码库

就像您所描述的那样,我个人从未见过有人创建MetaRepository


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接