DDD分层架构、整洁架构、六边形架构都是以领域模型为核心,实行分层架构。内部核心业务逻辑与外部应用、资源隔离并解耦。从而设计出“高内聚、低耦合”的微服务,以实现微服务的架构演进。DDD分层架构使得微服务的架构边界变得清晰。
六边形架构
提到微服务架构,一定会涉及到六边形架构。六边形架构(Hexagonal Architecture),也被称为端口与适配器架构。其将业务逻辑封装在核心内部,与外部基础设施隔离。
ps, 画图工具不直接支持六边形图形,用圆形替代。
DDD分层架构
DDD分层
用户接口层
用户接口层,完成后端微服务与前端不同用户的接口和数据适配。
用户接口层主要由facade接口、DTO以及DO数据的组装和转换。
应用层
应用层,协调领域层内多个聚合,面向用例和业务流程以完成服务的组合和编排。很薄的一层。
微服务之间通过应用层完成互相调用。
应用层主要有应用服务、事件订阅和发布。
领域层
领域层,实现领域模型的核心业务逻辑,体现领域模型的业务能力。
领域模型的业务逻辑主要由实体和领域服务实现。实体采用充血模型实现与其相关的业务功能。领域服务是组合聚合内多个实体,以实现复杂业务逻辑。
基础层
基础层,为其他层提供通用的技术和基础服务。基础层实现与各种技术的对接,包括数据库、缓存、消息中心和第三方服务等。
DDD分层代码模型
--root
--adapter: 适配器层
--rpc: RPC层,Domain层中port中依赖的外部的接口实现,调用远程RPC接口
--mq: 消息队列sender模块
--translate: 将外部数据结构映射为内部的DTO/model
--task: 任务,主要是调度任务的适配器
--controller: springMVC提供的controller
--app: 应用层是组合domain提供的能力,从而实现业务用例
--cases: 应用服务
--domain: 领域层
--service: 领域服务
--facotry: 工厂,创建复杂对象
--event: 事件驱动
--model: 对象和实体
--translate: 对象实体映射转换
--infrastructure: 基础设施层
--repository: 持久化层,包括db模型,sql读写等
--cache: 缓存读写
--producer: MQ消息生成,即发送MQ消息。
--config: 配置信息,例如应用配置、数据库、缓存配置等
--translate: 将存储层的数据结构DO映射为内部的DTO/model
--utils: 工具集合
--do: 存储层数据
--common: 公共层
--exception: 自定义异常
--enums: 枚举类
--constants: 全局公共常量池
参考
《中台架构与实现–基于DDD和微服务》–欧创新
从混乱到优雅:基于DDD的六边形架构的代码翻新指南