其他分享
首页 > 其他分享> > 领域驱动设计实现业务流程(二):编写应用服务

领域驱动设计实现业务流程(二):编写应用服务

作者:互联网

在之前的第一次迭代完成后,可以测试是否能正常响应。接下来该完成实际业务逻辑。

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处理业务需求的最常见最典型的形式
应用服务作为总体协调者

  1. 先通过资源库获取到聚合根
  2. 然后调用聚合根中的业务方法
  3. 最后再次调用资源库保存聚合根。

2.获取聚合根

软件中的写操作要么是修改既有数据,要么是新建数据。
对于前者,DDD要从资源库获取聚合根,而新建数据要新建聚合根。

//新建聚合根
//从资源库获得聚合根

前一篇:领域驱动设计实现业务流程(一):开始开发

标签:聚合,业务流程,业务,order,command,应用服务,编写,id
来源: https://blog.csdn.net/qq_40610003/article/details/114952065