Appearance
Day 13 - 应用服务(Application Service)
📖 今日目标
- 理解应用服务(Application Service)的概念
- 掌握应用服务的职责边界
- 区分应用服务和领域服务
核心概念
应用服务的职责
应用服务是领域层和外界(展示层、基础设施层)的协调者。它不包含业务逻辑,但负责:
- 编排领域对象
- 管理事务
- 处理安全认证
- 协调多个聚合
关键要点
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. 避免应用服务膨胀
常见错误:将大量业务逻辑放在应用服务中。
正确做法:
- 业务逻辑移到领域对象或领域服务
- 应用服务只负责协调和编排
面试考点
问题:应用服务应该包含业务逻辑吗?
答案:
不应该。应用服务应该:
- 编排:协调多个领域对象
- 事务:管理事务边界
- 安全:处理权限验证
- 转换:DTO与领域对象的转换
业务逻辑应该放在:
- 实体(Entity)
- 值对象(Value Object)
- 领域服务(Domain Service)
应用服务过胖是DDD反模式,需要将业务逻辑下沉到领域层。
实践思考
🎯 思考题:
分析以下代码是否属于应用服务职责:
- 调用仓储保存订单
- 计算订单总价
- 发送领域事件
- 验证用户权限
📅 学习进度
| Day | 主题 | 状态 |
|---|---|---|
| 01-12 | 战略设计 + 战术基础 | ✅ |
| 13 | 应用服务(Application Service) | ✅ |
| 14 | 命令与查询职责分离(CQRS) | ⬜ |
| ... | ... | ... |
| 30 | 复习与总结 | ⬜ |
