知识卡片

聚合根的三重角色:实体、组织管理者、对外联络人

普通读书笔记卡

内容

聚合根存在的目的,是避免聚合内因为缺少统一的业务规则控制而导致实体和值对象之间数据不一致,同时避免用加锁这种会增加复杂度、降低性能的方式来保证一致性。如果把聚合比作一个组织,聚合根就是这个组织的负责人,它同时承担三重角色:首先它本身是一个实体,拥有实体的业务属性和业务行为,可以在自己身上实现业务逻辑;其次它是聚合的管理者,在聚合内负责协调其他实体和值对象、按固定业务规则协同完成聚合共同的业务逻辑,并管理着聚合内所有实体和值对象的生命周期(聚合根被删除,它引用的实体和值对象也就不存在了);最后它是聚合对外的联络人和接口人,聚合之间只能通过聚合根ID关联的方式接受外部任务和请求,外部对象不能直接通过对象引用的方式访问聚合内部的对象——如果需要访问其他聚合的实体,要在应用服务里调用其他聚合的领域服务,把聚合根ID作为参数,先访问聚合根,再由聚合根导航到内部实体。这三重角色共同保证了:聚合内部数据的一致性变更、生命周期管理、以及对外交互,全部都要经过聚合根这一个统一入口,不存在绕过聚合根直接修改内部对象的路径。

参考来源

- 位置:第8章《聚合和聚合根:怎样设计聚合》"8.2 聚合根"(源文件:_epub-src/OEBPS/Text/chapter3-4-2.xhtml) - 结论依据:原文说明"首先,聚合根是实体,作为实体,它拥有实体的业务属性和业务行为……其次,它作为聚合的管理者,在聚合内负责协调实体和值对象……最后,它还是聚合对外的联络人和接口人,聚合之间以聚合根ID关联的方式接受聚合的外部任务和请求……聚合外部对象不能直接通过对象引用的方式访问聚合内的对象",直接支撑本卡片结论。 - 原始内容:聚合根也称为根实体,但它不仅是实体,还是聚合的管理者……聚合之间以聚合根ID关联的方式接受聚合的外部任务和请求,在限界上下文内实现聚合之间的业务协同,聚合外部对象不能直接通过对象引用的方式访问聚合内的对象。