Skip to content

Day 13 - 应用服务(Application Service)

📖 今日目标

  1. 理解应用服务(Application Service)的概念
  2. 掌握应用服务的职责边界
  3. 区分应用服务和领域服务

核心概念

应用服务的职责

应用服务是领域层和外界(展示层、基础设施层)的协调者。它不包含业务逻辑,但负责:

  • 编排领域对象
  • 管理事务
  • 处理安全认证
  • 协调多个聚合

关键要点

1. 应用服务 vs 领域服务

对比项应用服务领域服务
业务逻辑
事务管理负责不负责
编排编排多个领域对象封装跨实体的业务规则

2. 应用服务示例

java
public class OrderAppService {
    
    private final OrderRepository orderRepository;
    private final PaymentService paymentService;
    private final InventoryService inventoryService;
    
    @Transactional
    public void placeOrder(PlaceOrderCommand command) {
        Order order = orderFactory.createOrder(command);
        
        inventoryService.reserve(order.getItems());
        paymentService.charge(order.getCustomer(), order.getTotal());
        
        orderRepository.save(order);
    }
}

3. 避免应用服务膨胀

常见错误:将大量业务逻辑放在应用服务中。

正确做法:

  • 业务逻辑移到领域对象或领域服务
  • 应用服务只负责协调和编排

面试考点

问题:应用服务应该包含业务逻辑吗?

答案:

不应该。应用服务应该:

  1. 编排:协调多个领域对象
  2. 事务:管理事务边界
  3. 安全:处理权限验证
  4. 转换:DTO与领域对象的转换

业务逻辑应该放在:

  • 实体(Entity)
  • 值对象(Value Object)
  • 领域服务(Domain Service)

应用服务过胖是DDD反模式,需要将业务逻辑下沉到领域层。

实践思考

🎯 思考题

分析以下代码是否属于应用服务职责:

  1. 调用仓储保存订单
  2. 计算订单总价
  3. 发送领域事件
  4. 验证用户权限

📅 学习进度

Day主题状态
01-12战略设计 + 战术基础
13应用服务(Application Service)
14命令与查询职责分离(CQRS)
.........
30复习与总结

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

📚 导航

| ← Day 12 - 上一章 | Day 14 - 下一章 →

最后更新: