微服务架构模型有很多种,例如洋葱架构、CQRS和六边形架构等。其核心理念都是为了设计出“高内聚,低耦合”的微服务。而DDD分层架构的出现,使微服务的架构边界变得越来越清晰。
DDD分层架构包含四层,从上到下依次是:用户接口层、应用层、领域层和基础层。
1. 用户接口层
微服务应用面向不同前端应用时,同样一段业务逻辑,可能由于渠道不同,而在前端展示的页面要素,因此要求后端微服务返回的数据结果会不同。为了避免暴露微服务的核心业务逻辑,防止数据外泄,不能将后端对象的所有属性数据,不加区分地暴露给所有前端应用;更不能仅仅因为前端应用不同的数据展示要求,而后端定制开发出多个不同的应用服务或领域服务,面向前端应用提供不同的服务适配。保证应用层和领域层核心领域逻辑的稳定。
Facade服务:封装应用服务,适配不同前端应用的集成技术体系,提供不同类型的服务接口适配。
数据组装器Assembler:根据不同前端应用的数据需求,完成前端DTO和后端DO对象的组装和转换操作。
2. 应用层
应用层链接用户接口层和领域层,不应该实现领域模型的核心领域逻辑。主要职能:协调领域层多个聚合完成服务的组合和编排。
应用服务主要负责服务组合、编排和转发,处理业务用例的执行顺序以及结果的拼装。在应用服务中还可以进行安全认证、权限校验、事务控制、领域事件发布或订阅等。
3. 领域层
领域层是领域模型的核心,主要实现领域模型的核心业务逻辑。领域模型的业务逻辑主要由实体和领域服务来实现。其中实体会采用充血模型来实现业务功能,如单一实体(或值对象)不能实现时,就交由领域服务进行组合和协调聚合内多个实体(或值对象),实现复杂的业务逻辑。
4. 基础层
基础层贯穿DDD所有层。其职能:提供通用的技术和基础服务,包括第三方工具、驱动、消息中间件、网关、文件、缓存以及数据库等。
DDD分层架构的重要原则:每层只能与位于其下方的层发生耦合。
三层架构和DDD分层架构对比
DDD分层架构的优势
- 层间松耦合,成功降低了层与层之间的依赖。可以专注于本层的设计和开发,不担心会影响到其他层。
- 是程序的结构变得更加清晰,升级和维护变得更加容易,修改工作量小且范围可控。只要本层服务接口不变,其他层皆不用修改,即是接口发生变化,也只影响相邻的上层。
三层架构与DDD四层架构的关系
1. 用户接口层改变
用户接口层,引入DTO和Facade接口,给前端应用提供灵活的数据和接口适配能力。
2. 业务逻辑层的改变
DDD分层架构对三层架构的业务逻辑层进行了更清晰的划分,改善了三层架构核心业务逻辑混乱、代码改动相互影响大的问题。DDD分层架构将三层架构业务逻辑层的业务逻辑拆分到应用层和领域层,应用服务实现服务的组合和编排,领域服务完成核心领域逻辑。
3. 数据访问层的改变
三层架构数据访问层采用DAO方式。而DDD架构采用仓储模式,领域层可以用过仓储接口访问基础资源的实现逻辑。