4.8、应用服务层
分类: DDD领域驱动设计实战
应用服务层
应用服务层是应用层的核心,负责协调领域对象完成用例。合理设计应用服务层是 DDD 架构的重要部分。本节将学习如何实现应用服务层。
本节将学习:应用服务职责、事务管理、协调领域对象,以及用例实现。
应用服务职责
职责定义
应用服务的职责:
- 协调领域对象
- 管理事务
- 实现用例
- 不包含业务逻辑
事务管理
事务注解
@Service @Transactional(rollbackFor = Exception.class) public class OrderApplicationService { @Autowired private OrderRepository orderRepository; @Autowired private ProductRepository productRepository; public Order createOrder(OrderCreateDTO dto) { // 协调领域对象完成订单创建 // 事务由 @Transactional 管理 } }
协调领域对象
协调示例
@Service @Transactional(rollbackFor = Exception.class) public class OrderApplicationService { public Order createOrder(OrderCreateDTO dto) { // 1. 创建订单聚合 Order order = new Order(); order.setUserId(dto.getUserId()); // 2. 添加订单项 for (OrderItemDTO itemDTO : dto.getItems()) { Product product = productRepository.findById(itemDTO.getProductId()) .orElseThrow(() -> new ProductNotFoundException()); OrderItem item = new OrderItem(product, itemDTO.getQuantity()); order.addItem(item); } // 3. 计算总金额 order.calculateTotal(); // 4. 保存订单 orderRepository.save(order); return order; } }
用例实现
用例流程
官方资源
- DDD 应用服务:https://www.domainlanguage.com/ddd/
本节小结
在本节中,我们学习了:
第一个是应用服务职责。 协调领域对象,管理事务。
第二个是事务管理。 使用 @Transactional 管理事务。
第三个是协调领域对象。 协调多个领域对象完成用例。
第四个是用例实现。 实现业务用例流程。
这就是应用服务层。应用服务层是连接用户界面层和领域层的桥梁。
在下一节,我们将学习领域事件。