我正在努力思考如何正确地使用存储库模式。聚合根的核心概念不断出现。当我在web和Stack Overflow上搜索什么是聚合根时,我一直在寻找关于聚合根的讨论,以及指向应该包含基本定义的页面的死链接。
在存储库模式的上下文中,什么是聚合根?
我正在努力思考如何正确地使用存储库模式。聚合根的核心概念不断出现。当我在web和Stack Overflow上搜索什么是聚合根时,我一直在寻找关于聚合根的讨论,以及指向应该包含基本定义的页面的死链接。
在存储库模式的上下文中,什么是聚合根?
当前回答
在Erlang中,一旦聚合由状态内的数据结构组成,而不是OO组合,就不需要区分聚合。参见示例:https://github.com/bryanhunter/cqrs-with-erlang/tree/ndc-london
其他回答
如果您采用数据库优先的方法,则聚合根通常是1-多关系中第一边的表。
最常见的例子是Person。每个人都有许多地址、一张或多张工资单、发票、CRM条目等。并非总是如此,但有9/10次都是如此。
我们目前在一个电子商务平台上工作,我们基本上有两个聚合根:
客户 卖家
客户提供联系信息,我们将交易分配给他们,交易获得行项目,等等。
卖家出售产品,有联系人,关于我们的页面,特别优惠等。
这些分别由Customer和Seller存储库负责。
聚合根是一个简单概念的复杂名称。
一般的想法
设计良好的类图封装了它的内部结构。访问该结构的点称为聚合根。
解决方案的内部结构可能非常复杂,但是这个层次结构的用户将只使用root. dosomethingwherehasbusinessmeaning()。
例子
检查这个简单的类层次结构
你想怎样驾驶你的车?选择更好的API
选项A(它只是以某种方式工作):
car.ride();
选项B(用户可以访问类内部内容):
if(car.getTires().getUsageLevel()< Car.ACCEPTABLE_TIRE_USAGE)
for (Wheel w: car:getWheels()){
w.spin();
}
}
如果你认为选择A更好,那么恭喜你。你得到了根集合背后的主要原因。
聚合根封装多个类。您只能通过主对象操作整个层次结构。
聚合是指某物的集合。 根就像树的顶部节点,从那里我们可以访问网页文档中的<html>节点。 博客类比,一个用户可以有很多帖子,每个帖子可以有很多评论。因此,如果我们获取任何用户,那么它可以作为根访问所有相关的帖子和这些帖子的进一步评论。这些统称为集合或聚合
来自DDD Step By Step(离线):
在一个聚合中有一个聚合根。聚合根为 属性中的所有其他实体和值对象的父实体 聚合。 存储库对聚合根进行操作。
更多信息也可以在这里找到。