我将以博客帖子为例。
BlogPost
实体是一个聚合根,它包含一个BlogPostComment
集合。
很好,因为没有父博客帖子就无法存在帖子评论。 BlogPostComment
会处理BlogPost
上的每项操作,或者由管理BlogPost
实体的服务来处理。
但是,通过这种方法,每次我想添加评论时,我都必须检索所有博客文章信息。每次我要删除评论时,我都必须检索所有博客文章信息。等等
因此,第一个也是最明显的解决方案是提供单独的服务以在BlogPostComment
上运行。但这将违反发表评论的概念。您不应该只对注释进行操作。
什么是正确的方法?
答案 0 :(得分:1)
我认为将评论从文章中拆分出来是可以接受的,因为可能会有大量评论。如果可以将注释组织/呈现为线程,则线程可能是良好的聚合根。然后,线程可以执行诸如计算注释的嵌套深度以协助渲染的操作。这样,该逻辑可以位于线程的“最小范围”内,而不是本文对象逻辑的一部分。
这是设计决定。随着模型的发展,它们可能会发生变化。将模型分解成可以有效使用的可管理部分,就是处理代码并在变得笨拙时对其进行重构