Appearance
Day 08 - 聚合(Aggregate)与聚合根
📖 今日目标
- 理解聚合(Aggregate)的概念
- 掌握聚合根(Aggregate Root)的设计
- 学习聚合的边界划分原则
核心概念
聚合
聚合 是一组相关对象的组合,作为一个数据修改的单元。聚合定义了一组对象的所属和边界。
聚合根
聚合根(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");
}
// ...
}
}面试考点
问题:聚合的边界应该多大?
答案:
聚合设计建议:
越小越好:
- 减少并发冲突
- 简化维护
包含必要元素:
- 聚合内对象必须一起创建、更新、删除
避免跨聚合引用:
- 通过ID而非对象引用
参考原则:
- "一次业务操作修改一个聚合"
- 符合事务边界但更小
实践思考
🎯 思考题:
在订单场景中,Order和OrderItem是否应该在一个聚合内?Order和Product呢?为什么?
📚 扩展阅读
- 《领域驱动设计》第6章:聚合
- Aggregate - Martin Fowler
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-07 | 战略设计 + 实体 + 值对象 | ✅ |
| 08 | 聚合(Aggregate)与聚合根 | ✅ |
| 09 | 领域服务(Domain Service) | ⬜ |
| ... | ... | ... |
| 30 | 复习与总结 | ⬜ |
