Skip to content

Day 12 - 工厂模式(Factory)

📖 今日目标

  1. 理解工厂(Factory)在DDD中的作用
  2. 掌握工厂的使用场景
  3. 学习工厂的实现方式

核心概念

工厂的必要性

在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 构造函数

对比项构造函数工厂
复杂度简单复杂
业务规则
依赖注入不支持支持

面试考点

问题:何时应该使用工厂而不是构造函数?

答案:

  1. 创建逻辑复杂:涉及多个步骤和业务规则
  2. 需要依赖:创建过程需要访问其他服务
  3. 不同创建方式:同一聚合有多种创建场景
  4. 隐藏实现细节:不想让调用方知道具体创建过程

实践思考

🎯 思考题

分析订单创建场景,什么情况下适合用工厂?什么情况下直接用构造函数?


📅 学习进度

Day主题状态
01-11战略设计 + 战术基础
12工厂模式(Factory)
13应用服务(Application Service)
.........
30复习与总结

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

📚 导航

| ← Day 11 - 上一章 | Day 13 - 下一章 →

最后更新: