领域驱动设计实现业务流程(二):编写应用服务
作者:互联网
在之前的第一次迭代完成后,可以测试是否能正常响应。接下来该完成实际业务逻辑。
1.应用服务
应用服务,是领域模型的门面。在DDD中业务被提到第一优先级,所以我们希望对业务的处理能提取出来。
在DDD中,实现业务功能应该采用自顶向下的实现方式。
ApplicationService采用了门面模式,作为领域模型向外提供业务功能的总出入口,就像酒店的前台处理客户的不同需求一样。
//示例代码OrderApplicationService:
//该方法目的为改变订单中产品的数量,必须是事务操作
@Transactional
public void changeProductCount(String id, ChangeProductCountCommand command) {
//接收参数为实体ID和命令对象
//获得Order对象
Order order = orderRepository.byId(orderId(id));
//order自身业务逻辑:获得产品ID,改变数量
order.changeProductCount(ProductId.productId(command.getProductId()), command.getCount());
//order仓库保存对象
orderRepository.save(order);
}
通过Controller层调用ApplicationService。
一个业务用例对应应用服务上的一个业务方法,即Controller控制器的方法与ApplicationService应用服务的方法对应。
//获得订单ID和命令对象
@PostMapping("/{id}/products")
public void changeProductCount(@PathVariable(name = "id") String id, @RequestBody @Valid ChangeProductCountCommand command) {
//通过Controller层调用ApplicationService
orderApplicationService.changeProductCount(id, command);
}
对业务需求的处理流程体现了DDD处理业务需求的最常见最典型的形式:
应用服务作为总体协调者
- 先通过资源库获取到聚合根
- 然后调用聚合根中的业务方法
- 最后再次调用资源库保存聚合根。
2.获取聚合根
软件中的写操作要么是修改既有数据,要么是新建数据。
对于前者,DDD要从资源库获取聚合根,而新建数据要新建聚合根。
//新建聚合根
//从资源库获得聚合根
标签:聚合,业务流程,业务,order,command,应用服务,编写,id 来源: https://blog.csdn.net/qq_40610003/article/details/114952065