DDD - 聚合和聚合根

一、聚合

1、聚合的概念:

(1)经过事件风暴,找出实体或值对象,进而将业务关联紧密的实体和值对象进行组合,构成聚合。

(2)聚合就是由业务和逻辑紧密关联的实体和值对象组合而成的,聚合是数据修改和持久化的基本单元,每一个聚合对应一个仓储,实现数据的持久化。

2、聚合有一个聚合根和上下文边界:

(1)一个聚合根:如果把聚合比作组织,那聚合根就是这个组织的负责人。聚合根也称为实体,但它不仅是实体,还是聚合的管理者。在聚合之间,聚合根还是聚合对外的接口人,以聚合根ID关联的方式接受外部任务和请求,在上下文内实现聚合之间的业务协同。(若访问聚合的实体,须先访问聚合根,再导航到聚合内部实体)

(2)上下文边界:根据业务单一职责和高内聚原则,定义了聚合内部应该包含哪些实体和值对象,而聚合之间的边界是松耦合的。(因此其设计出的微服务自然是“高内聚、低耦合”的)

3、聚合的作用:领域模型内的实体和值对象就好比个体,而能让实体和值对象协同工作的组织就是聚合,它用来确保这些领域对象在实现共同的业务逻辑时,能保证数据的一致性。

4、聚合如何实现核心业务逻辑?

跨多个实体的业务逻辑通过领域服务来实现,跨多个聚合的业务逻辑通过应用服务来实现。

二、一个关于如何设计聚合的例子

step 1 :梳理所有实体和值对象,比如这里投保单、标的、客户、被保人

step 2 :确定根实体,也就是聚合根(图中黄色是聚合根)

判断依据:是否有独立的生命周期?是否有全局唯一的ID?是否可以创建或修改其他对象?是否有专门的模块来管这个实体

step 3 :根据业务单一职责和高内聚原则,找出聚合根关联的所有紧密依赖的实体和值对象。构建出1个包含聚合根(唯一)、多个实体和值对象的对象集合,这个集合就是聚合

step 4 :在聚合内根据聚合根、实体和值对象的依赖关系,画出对象的引用和依赖模型。

step 5 :多个聚合根据业务语义和上下文,一起划分到同一个限界上下文内。

三、聚合的一些设计原则

1、在一致性边界内建模真正的不变条件。聚合用来封装真正的不变性,而不是简单的将对象组合在一起。

2、设计小聚合

3、通过唯一标识引用其它聚合

4、在边界之外使用最终一致性 (在一次事务中,最多只能更改一个聚合的状态;如果一次业务操作涉及多个聚合状态的更改,应采用领域事件的方式异步修改相关的聚合,实现聚合之间的解耦)

5、通过应用层实现跨聚合的服务调用

四、聚合、聚合根、实体、值对象的联系和区别:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值