首页/开发/系统分析与架构设计速查/聚合与聚合根(Aggregate)
需求分析与建模61 条

聚合与聚合根(Aggregate)

聚合是一致性边界:外部只能通过聚合根访问内部实体与值对象,一次事务只修改一个聚合;跨聚合一致性通过领域事件实现最终一致。

聚合根聚合适配的唯一入口,负责维护内部不变量
设计原则聚合尽量小;跨聚合用 ID 引用而不是对象引用;一次事务只改一个聚合
一致性聚合内强一致,聚合间最终一致

聚合不变量示例(伪代码)

聚合不变量示例(伪代码)
class Order {                 // 聚合根
  addLine(sku, qty) {
    require(status == 草稿)      // 不变量一:仅草稿可改
    require(lines.size < 100)    // 不变量二:行数上限
  }
  submit() { require(lines 非空) }
}
// 跨聚合只存 ID 引用,不持有其他聚合对象
把所有实体塞进一个大聚合会带来锁竞争与加载开销,聚合边界应按真正需要原子保证的不变量来划。

易错点

  • 用数据库外键代替聚合边界思考,事务范围被无限扩大
  • 聚合根直接暴露内部集合的修改方法,不变量被绕过

数据来源与参考

  • Eric Evans《Domain-Driven Design》
  • Vaughn Vernon《Effective Aggregate Design》(2011)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌