【发布时间】:2020-06-03 11:34:59
【问题描述】:
我读过一个聚合应该被它的聚合根封装。如果聚合根不存在,则聚合不应该存在,我们应该只通过它的根访问聚合。
举个例子:我有一个视频网站,视频很少,而这些视频可能有很多 cmets。
在我看来,视频是聚合根,评论是聚合,因为没有视频,评论就没有意义。
但是我如何在不从数据库中加载所有 cmets 的情况下检索它们?那将是一个很大的性能打击。延迟加载可能是一种解决方案,但我读过不建议这样做。
评论可以是它自己的聚合根,所以我可以独立查询它,但这会破坏“没有根的存在”规则,对吧?
【问题讨论】:
-
考虑一下你为什么关心是否每条评论都有一篇博文可能会有所帮助。
-
您对聚合和聚合根的定义是错误的。聚合是对象的集群,聚合根是该集群的根。请参阅:stackoverflow.com/a/1958765/1066906 和 stackoverflow.com/questions/20601937/…
-
查看@VoiceOfUnreason 的评论。从您的示例中:无法确定评论是否可以是它自己的汇总。还要记住,没有完美的模型。应用 DDD 时应根据业务规则建模。不要陷入对象思维的陷阱。这有点换位思考了。确保您没有试图使用 DDD 使事情变得过于复杂。对于 CRUD,这将是不必要的。
标签: aggregate domain-driven-design ddd-repositories