我正在努力思考如何正确地使用存储库模式。聚合根的核心概念不断出现。当我在web和Stack Overflow上搜索什么是聚合根时,我一直在寻找关于聚合根的讨论,以及指向应该包含基本定义的页面的死链接。
在存储库模式的上下文中,什么是聚合根?
我正在努力思考如何正确地使用存储库模式。聚合根的核心概念不断出现。当我在web和Stack Overflow上搜索什么是聚合根时,我一直在寻找关于聚合根的讨论,以及指向应该包含基本定义的页面的死链接。
在存储库模式的上下文中,什么是聚合根?
当前回答
聚合是指某物的集合。 根就像树的顶部节点,从那里我们可以访问网页文档中的<html>节点。 博客类比,一个用户可以有很多帖子,每个帖子可以有很多评论。因此,如果我们获取任何用户,那么它可以作为根访问所有相关的帖子和这些帖子的进一步评论。这些统称为集合或聚合
其他回答
来自埃文斯DDD:
AGGREGATE是一组相关联的对象,我们将其作为一个单元来处理数据更改。每个AGGREGATE都有一个根和一个边界。边界定义了聚合中的内容。根是聚合中包含的单个特定ENTITY。
And:
根是AGGREGATE中唯一允许外部对象持有对[]引用的成员。
这意味着聚合根是唯一可以从存储库加载的对象。
一个例子是一个包含Customer实体和Address实体的模型。我们永远不会直接从模型中访问Address实体,因为如果没有关联的Customer上下文,它就没有意义。所以我们可以说Customer和Address一起构成了一个集合,而Customer是一个集合根。
在存储库模式上下文中,聚合根是客户端代码从存储库加载的唯一对象。
存储库封装了对子对象的访问——从调用者的角度来看,它会自动加载它们,要么在加载根对象的同时加载,要么在实际需要它们的时候加载(与惰性加载一样)。
例如,您可能有一个Order对象,它封装了多个LineItem对象上的操作。您的客户端代码永远不会直接加载LineItem对象,只加载包含它们的Order,这将是域的该部分的聚合根。
聚合是通过限制聚合根的访问来保护不变量和强制一致性的地方。不要忘记,聚合应该根据您的项目业务规则和不变量进行设计,而不是数据库关系。不应该注入任何存储库,也不允许进行任何查询。
聚合是指某物的集合。 根就像树的顶部节点,从那里我们可以访问网页文档中的<html>节点。 博客类比,一个用户可以有很多帖子,每个帖子可以有很多评论。因此,如果我们获取任何用户,那么它可以作为根访问所有相关的帖子和这些帖子的进一步评论。这些统称为集合或聚合