Appearance
Day 12 - 工厂模式(Factory)
📖 今日目标
- 理解工厂(Factory)在DDD中的作用
- 掌握工厂的使用场景
- 学习工厂的实现方式
核心概念
工厂的必要性
在DDD中,聚合的创建可能涉及复杂的业务规则和校验。将创建逻辑从构造函数中抽离出来,使实体可以专注于自己的职责。
关键要点
1. 工厂的场景
- 聚合创建包含复杂业务规则
- 需要在不同地方以不同方式创建聚合
- 创建过程需要访问其他领域服务
2. 工厂的实现
java
public class OrderFactory {
private final PricingService pricingService;
public Order createOrder(Customer customer, List<CartItem> items) {
// 复杂创建逻辑
Order order = new Order(OrderId.generate(), customer.getId());
for (CartItem item : items) {
order.addItem(item.getProduct(), item.getQuantity());
}
// 应用定价规则
Money total = pricingService.calculateTotal(order);
order.setTotal(total);
return order;
}
}3. 工厂 vs 构造函数
| 对比项 | 构造函数 | 工厂 |
|---|---|---|
| 复杂度 | 简单 | 复杂 |
| 业务规则 | 无 | 有 |
| 依赖注入 | 不支持 | 支持 |
面试考点
问题:何时应该使用工厂而不是构造函数?
答案:
- 创建逻辑复杂:涉及多个步骤和业务规则
- 需要依赖:创建过程需要访问其他服务
- 不同创建方式:同一聚合有多种创建场景
- 隐藏实现细节:不想让调用方知道具体创建过程
实践思考
🎯 思考题:
分析订单创建场景,什么情况下适合用工厂?什么情况下直接用构造函数?
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-11 | 战略设计 + 战术基础 | ✅ |
| 12 | 工厂模式(Factory) | ✅ |
| 13 | 应用服务(Application Service) | ⬜ |
| ... | ... | ... |
| 30 | 复习与总结 | ⬜ |
