JPA聚合根方法

JPA aggregate root approach

我将以博客 post 为例。

BlogPost 实体是聚合根,它包含一个 BlogPostComment 集合。 这很好,因为没有父博客 post 就不可能存在 post 评论。 BlogPostComment 上的每个操作都由 BlogPost 或管理 BlogPost 实体的服务负责。

然而,通过这种方式,每次我想添加评论时,我都被迫检索所有博客 post 信息。每次我想删除评论时,我都被迫检索所有博客 post 信息。等等

因此,第一个也是最明显的解决方案是提供单独的服务来对 BlogPostComment(s) 进行操作。但这将违反 post 评论的概念。你不应该单独对评论进行操作。

正确的做法是什么?

我认为将评论从文章中拆分出来是可以接受的,因为评论可能会很多。如果评论可以 organised/rendered 作为线程,那么线程可能是一个很好的聚合根。然后一个线程可以做一些事情,比如计算评论的嵌套深度以帮助渲染。然后该逻辑可以位于线程的“最小范围”中,而不是文章对象逻辑的一部分。

这些都是设计决定。它们可能会随着模型的发展而改变。将模型分解成可以有效使用的可管理部分是使用代码并在它变得笨拙时重构它的问题