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