DDD必知必会格物系列->聚合根

知识点储备

有些知识点虽然是可选项,
但是如果没有这些知识储备的话,
下面的阅读可能会略有困难(具体情况因人而异)

基础知识点(必选)


[
"聚合",
"实体",
"值对象"
]

关联知识点(可选)


[
"核心领域",
""
]

其他名称

聚合根也称为根实体

概览

Aggregate(聚合)是一组相关对象的集合,作为一个整体被外界访问,
聚合根(Aggregate Root)是这个聚合的根节点。

聚合根(Aggregate Root)是DDD中的一个概念,是一种更大范围的封装,会把一组有相同生命周期、在业务上不可分割的实体和值对象放在一起,只有根实体可以对外暴露引用,这也是一种内聚性的表现。

DDD圈真乱

聚合根不仅是实体,还是聚合的管理者。
若把聚合比作组织,那聚合根就是该组织负责人。

聚合根的特点

  • [x] 聚合根是实体,有实体的特点,
  • [ ] 具有全局唯一标识,
  • [x] 有独立的生命周期。
  • [ ] 一个聚合只有一个聚合根,
  • [x] 聚合根在聚合内对实体和值对象采用直接对象引用的方式进行组织和协调,
    聚合根与聚合根之间通过ID关联的方式实现聚合之间的协同

规则

确定聚合边界要满足固定规则(Invariant),是指在数据变化时必须保持的一致性规则,具体规则如下。

● 根实体具有全局标识,最终负责检查规定规则。
● 聚合内的实体具有本地标识,这些标识在Aggregate内部才是唯一的。
● 外部对象不能引用除根Entity之外的任何内部对象。
● 只有Aggregate的根Entity才能直接通过数据库查询获取,其他对象必须通过遍历关联来发现。
● Aggegate内部的对象可以保持对其他Aggregate根的引用。
● Aggregate边界内的任何对象在修改时,整个Aggregate的所有固定规则都必须满足。

举个栗子

仍以银行转账的例子来说明,如图5所示,账号(Account)是客户信息(CustomerInfo)Entity和值对象(Address)的聚合根,交易(Tansaction)是流水(Journal)的聚合根,流水是因为交易才产生的,具有相同的生命周期。

图5↓

限界上下文 <1>-- 聚合 <1>-- 实体

而聚合根就是一个实体,

摘抄文档

作者:人民邮电出版社
链接:https://www.zhihu.com/question/25089273/answer/969378280
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文地址:https://www.cnblogs.com/love-zf/p/14798252.html