DDD领域驱动设计实战-服务和数据在微服务各层协作的最佳实践

本文详细探讨了微服务架构下服务协作的类型和调用方式,包括Facade、应用、领域和基础服务的角色。强调了领域驱动设计(DDD)中的服务封装与组合,以及微服务各层数据对象的职责和转换过程。服务调用涉及微服务内跨层和微服务间通信,以及领域事件驱动。此外,还讨论了松散和严格分层架构的优缺点。
摘要由CSDN通过智能技术生成

1 服务协作

1.1 服务的类型

按照分层架构设计出来的微服务,其内部各层服务主要功能和职责如下:

Facade服务

位于用户接口层,包括接口和实现两部分。用于处理用户发送的Restful请求和解析用户输入的配置文件等,并将数据传递给应用层。或者在获取到应用层数据后,将DO组装成DTO,将数据传输到前端应用。

应用服务

位于应用层。用来表述应用和用户行为,负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果拼装,对外提供粗粒度的服务。

领域服务

位于领域层。领域服务封装核心的业务逻辑,实现需要多个实体协作的核心领域逻辑。它对多个实体或方法的业务逻辑进行组合或编排,或者在严格分层架构中对实体方法进行封装,以领域服务的方式供应用层调用。

基础服务

位于基础层。提供基础资源服务(比如数据库、缓存等),实现各层的解耦,降低外部资源变化对业务应用逻辑的影响。基础服务主要为仓储服务,通过依赖倒置提供基础资源服务。领域服务和应用服务都可以调用仓储服务接口,通过仓储服务实现数据持久化。

1.2 服务调用

  • 微服务的服务调用场景

微服务内跨层服务调用

微服务架构采用前后端分离,前端应用独立部署。前端应用调用发布在API网关上的Facade服务,Facade定向到应用服务。应用服务作为服务组织和编排者,它的服务调用有如下两种路径:

  • 应用服务调用组装领域服务

    领域服务会组装实体和实体方法,实现核心领域逻辑。领域服务通过仓储服务获取持久化数据对象,完成实体数据初始化。

  • 应用服务直接调用仓储服务

    主要针对像缓存、文件等类型的基础层数据访问。这类数据主要是查询操作,没有太多的领域逻辑,不经过领域层,不涉及数据库持久化对象。

微服务之间的服务调用

微服务间的应用服务可直接访问,也可通过API网关。由于跨微服务操作,在进行数据新增和修改操作时,注意保证数据一致性。

领域事件驱动

领域事件驱动包括微服务内和微服务之间的事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值