博客上的评论 post 应该是聚合根吗?

Should a comment on a blog post be an aggregate root?

我读到聚合应该由其聚合根封装。如果聚合根不存在,则聚合不应存在,我们应该仅通过其根访问聚合。

考虑一个例子:我有一个视频网站,只有很少的视频,这些视频可能会有很多评论。

在我看来,视频是聚合根,评论是聚合,因为没有视频评论就没有意义。

但是我如何在不从数据库中加载所有评论的情况下检索评论?那将是一个很大的性能打击。延迟加载可能是一种解决方案,但我读到不推荐这样做。

评论可以是它自己的聚合根,所以我可以独立查询它,但这会破坏“无根存在”的规则,对吧?

我认为你处理 2 个不同级别的问题。

概念 => 我将如何定义聚合等。

实施 => 我的系统会很慢

如果您认为加载评论有问题,可以优化您的实现。

你正在通过从持久性的角度思考聚合来捕捉自己。在聚合中,某物是否是某物的一部分或某物是否拥有某物并不重要。这些是关系术语。重要的是共享同一根的对象在概念上的统一。这种统一的副作用是事务边界 - 然后在存储库和存储机制的帮助下用于保存聚合。聚合不关心它是否要被保存。存储库接口(作为域的一部分)存在只是因为我们受到包含数据库的体系结构的限制。注意行为、商业规则、凝聚力。聚合是一个非常复杂的过程,然后在 DDD 书籍中介绍。

看看 人生游戏。这些小方块都聚集在一些共同的根周围。他们不在乎他们是否会得救。他们只是在完成他们的使命。它们不是聚合的一部分,它们是更加动态和复杂的事物的一部分。在 DB 中保存 Game of life 的快照并不能告诉你它们的本质。

此外,不要将查询视为固定的东西。可以通过许多不同的方式(部分或整体)加载和获取聚合。这是应用程序的工作。首先考虑查询意味着您将聚合视为数据集合。