在 DDD 中,评论是否包含在 Post 聚合中?

In DDD, is Comment included in Post Aggregate?

抱歉英语不好。

在学习 DDD 时,我有一个关于聚合的问题。

Board域中,我们有两个实体,一个是Post,另一个是Comment

我认为 Comment 不能没有 Post。所以我认为 Comment 应该在 Post 聚合中,并且 Board 域有一个聚合,其根是 Post.

但从不同的角度来看,同一聚合中的实体具有相同的生命周期, 所以 Comment 生命周期不同于 Post 的生命周期, 并且修改 Post 不会影响 Comment,反之亦然。

所以Board域有两个集合,

一个是聚合,根是 Comment,另一个是聚合,根是 Post

这两个想法让我感觉很乱。

我以前去过那里,我很难学到它。乍一看,post 聚合中包含评论部分似乎很自然,但这是您在使用此设计时可能会遇到的限制。

  • 您可能需要删除 post 并保留评论。与您在某些社交媒体平台上看到的一样。
  • A post 可以有很多评论,以至于每次获取 post.
  • 时将它们全部加载到内存中变得很昂贵
  • 用户可以直接与评论互动(反应、对评论发表评论、分享、提及其他用户......)因此,如果评论可以在整个系统中被唯一标识,那就更容易了。
  • 您可能需要列出用户的所有评论。当评论是 post 聚合的一部分时,它变得更难。

将 PostComment 作为单独的集合并保留对 post 的引用会更安全。作为设计聚合的一般规则,您应该使它们尽可能小。

我推荐阅读这篇精彩的文章。这改变了您对聚合设计规则的看法。

Effective Aggregate Design Part I: Modeling a Single Aggregate