在 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
抱歉英语不好。
在学习 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