CQRS在一条订单系统中的实践(三)--DDD分层协作实践

DDD分层协作 CQRS在一条订单系统中的实践(三)--DDD分层协作实践
文章图片

支付订单分层 CQRS在一条订单系统中的实践(三)--DDD分层协作实践
文章图片

用户接口层:适配不同终端(gateway api、dubbo api、kafka consumer)生成Command

|-com.yit.orders.facade: |-com.yit.orders.facade.OrderPayService:创建OrderPayCommand,交由PayingOrderCommandHandler执行

应用服务层:执行来自用户界面层的命令,不实现具体业务。一般过程为,通过领域仓储访问聚合,调度聚合的行为函数响应命令,管理聚合对应的事务并通过领域仓储对聚合进行持久化,通过事件总线发布和订阅聚合产生的领域事件;
|-com.yit.orders.module.paying.application |-command |-com.yit.orders.module.paying.application.command.OrderPayCommand:支付指令 |-com.yit.orders.module.paying.application.command.PayingOrderCommandHandler:支付指令的执行(应用服务,管理多个聚合的事务,支付订单的例子中仅操作一个聚合) |-domainEventHandler |-com.yit.orders.module.paying.application.domainEventHandler.pay.common.OrderPayEventHandler:订阅领域事件(通过订阅模型进行解耦)

领域层:主要实现领域模型的核心业务逻辑,体现领域模型的业务能力。聚合确保业务逻辑的原子性和一致性(聚合内实体的事务边界),产生领域事件。
|-com.yit.orders.module.paying.domain |-aggregate |-com.yit.orders.module.paying.domain.aggregate.IPayingOrderRepository:定义聚合仓储接口(依赖倒置) |-com.yit.orders.module.paying.domain.aggregate.ReadWritePayingNormalOrder:聚合(写模型),内聚业务逻辑,所有的业务扭转都必须通过聚合达成 |-event |-com.yit.orders.module.paying.domain.event.pay.common.OrderPayEvent:领域事件(值对象,由聚合或实体产生,在应用层进行发布,进行聚合边界之外的通信) |-readonly |-com.yit.orders.module.paying.domain.readonly.ReadonlyPayingOrder:读模型

领域仓储层:
|-com.yit.orders.module.paying.infrastructure |-com.yit.orders.module.paying.infrastructure.PayingOrderRepository:实现了领域层定义领域仓储接口(通过接口的方式达到外层依赖内层)

实现参考:
推荐一下MS的这个官方微服务示例项目
EShopOnContainers
设计面向 DDD 的微服务
【CQRS在一条订单系统中的实践(三)--DDD分层协作实践】DDD 分层

    推荐阅读