DDD分层
最后更新于:2022-04-02 03:07:59
[TOC]
## DDD领域驱动设计理论
DDD是一种处理高度复杂领域的设计思想,试图分离技术实现的复杂性,同时围绕业务概念构建领域模型,提出的一种软件架构设计的方法论
DDD领域驱动设计
- 战略设计:重业务建模,以业务视角,拆分领域,通过事件风暴(从发散到收敛过程),梳理业务并构建领域模型,这块过程会涉及业务人员、产品人员、架构师等多方参与
- 战术设计:重落地实现,以构建的领域模型,建立了领域模型的边界与上下文,也就确认了微服务的边界,这个过程会涉及架构师、技术人员参与
## DDD各层的主要内容
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/71/aa/71aa82b6940628d0287b60a1c9cf69ac_964x872.png)
* **接口层(Interfaces)**:该层包含与其他系统交互的所有内容,如Web服务器、RESTful接口。接口层处理传入数据的解释、校验、编解码、序列化操作,同时可以考虑引入专门的DTO(数据转换对象)来协助数据转换;
* **应用层(Application)**:该层负责驱动应用程序完成工作流程。很薄一层,协调多个领域对象(实体、聚合根、领域服务)实现服务编排和组合完成工作流,该层通常不应该包含具体业务逻辑。
* 应用业务流中,涉及其他微服务RPC调用,微服务编排、组合,也在该层调用
* 分布式事务通常也是在该层实现
* 消息驱动的事件也是在该层驱动
* 日志记录通常也是在该层记录
* **领域层(Domain)**:该层是软件的核心,包含业务逻辑具体实现,包含实体、值对象、聚合、领域服务、仓储接口等领域对象内容,通常该层应该配备图示告知软件是如何工作的;
* **基础层(Infrastructure)**:包含网关、缓存、数据库存储、消息中间件、监控、应用程序服务等通用的技术和基础服务
* 基础层以不同方式支持到其他三层,促进各层间通信
* 配置文件,数据库Schema模式定义以及仓储接口实现都是基础结构的一部分
### 传统MVC分层演进到DDD分层参考
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a2/4c/a24c1fbada7c367c67b712c965204803_1700x1268.png)
1. **业务逻辑层演进**:DDD领域驱动设计,把业务逻辑层内聚到领域层,同时将跨领域的服务抽离到应用层。相对于传统的三层架构,领域业务更简单内聚,层之间的职责也更加清晰,应用层可以更加灵活组装领域服务,适配业务变化;
2. **数据访问层演进**:仓储(Repository)包含**仓储接口(放在Domain领域层)**和**仓储实现(放在Infrastructure基础层)**,DDD分层架构将原来DAO数据访问方式,通过依赖倒置实现各层对基础资源的解耦,让基础层的组件来适配其他层接口。
通过领域层的仓储接口设计,在对领域层进行UnitTest,就非常容易Mock数据实现了(仅需要Mock一个仓储层的实现,就可以完成领域模型的测试)。
';