Skip to content

Day 08 - 聚合(Aggregate)与聚合根

📖 今日目标

  1. 理解聚合(Aggregate)的概念
  2. 掌握聚合根(Aggregate Root)的设计
  3. 学习聚合的边界划分原则

核心概念

聚合

聚合 是一组相关对象的组合,作为一个数据修改的单元。聚合定义了一组对象的所属和边界。

聚合根

聚合根(Aggregate Root) 是聚合的入口点,所有对聚合内对象的访问都必须通过聚合根进行。

关键要点

1. 聚合的设计原则

  • 聚合内对象保持一致性
  • 聚合根负责维护聚合的不变量
  • 聚合是独立的持久化单元

2. 聚合的边界划分

划分原则:

  • 考虑业务不变性
  • 避免跨聚合的引用
  • 保持聚合足够小

3. 聚合根的职责

java
public class Order extends AggregateRoot {
    private List<OrderItem> items;
    
    // 聚合根控制聚合内的一致性
    public void addItem(Product product, int quantity) {
        if (quantity <= 0) {
            throw new IllegalArgumentException("数量必须大于0");
        }
        // ...
    }
}

面试考点

问题:聚合的边界应该多大?

答案:

聚合设计建议:

  1. 越小越好

    • 减少并发冲突
    • 简化维护
  2. 包含必要元素

    • 聚合内对象必须一起创建、更新、删除
  3. 避免跨聚合引用

    • 通过ID而非对象引用
  4. 参考原则

    • "一次业务操作修改一个聚合"
    • 符合事务边界但更小

实践思考

🎯 思考题

在订单场景中,Order和OrderItem是否应该在一个聚合内?Order和Product呢?为什么?


📚 扩展阅读


📅 学习进度

Day主题状态
01-07战略设计 + 实体 + 值对象
08聚合(Aggregate)与聚合根
09领域服务(Domain Service)
.........
30复习与总结

本文为DDD 30天学习计划第8天内容

📚 导航

| ← Day 07 - 上一章 | Day 09 - 下一章 →

最后更新: