DDD
领域驱动设计
四层模型的软件设计
将传统软件设计是三层模型MVC,DDD是四层模型:用户界面层、应用层、领域层、基础设施层。它通过分层解耦来解决复杂业务系统的设计难题。与传统三层模型相比,它有更明确的职责划分和领域聚焦。
用户界面层:Controller、ViewModel、
- 接收输入数据并转换为DTO
- 不包含业务逻辑
- 负责权限验证等基础校验
- 返回HTTP状态码和错误信息
应用层:
- 职责:协调领域对象完成业务、事务管理、安全控制、事件发布
- 薄层(理想厚度<100行/Service)
- 不包含核心业务规则
- 负责跨聚合协调
领域层:
- 职责:封装核心业务逻辑、维护业务规则和状态、定义业务概念和流程
- 系统核心(最复杂且最重要的层)
- 与技术实现完全解耦
- 充血模型(业务逻辑在领域对象内)
基础设施层
- 职责:提供技术实现支持、实现持久化机制、集成外部服务
- 纯技术实现层
- 依赖领域层接口
- 可替换性(不同实现可插拔)
何时选择DDD四层模型
适用场景 ✅
- 复杂业务系统(保险、金融、电商)
- 长生命周期项目(持续演进5年以上)
- 多团队协作(需要明确上下文边界)
- 高业务规则密度(数百条业务规则)
不适用场景 ❌
- 简单CRUD应用
- 短期原型项目
- 技术工具类开发
- 报表生成等数据导向系统
统一语言
战略设计
定义:领域、子域(核心域、支撑域、通用域)、限界上下文
战术设计
定义:实体、值对象、聚合、聚合根、领域服务、领域事件、领域模型
领域建模
领域驱动设计的核心在于领域建模,架构师的水平高低在很大程度上也体现在领域建模水平上。
领域建模的主要目的是捕捉业务知识,形成统一语言,沉淀领域模型。好的领域建模就意味着对业务要有深刻的理解,能够洞察问题本质。领域建模的产出物一般有以下内容:
- 领域模型:包含领域对象、属性、关系、行为、边界范围等各个方面,用于描述业务的本质,这也是最重要的产出物。
- 用例图:用于明确系统的功能。
- 数据模型:描述系统的数据结构和关系,包括实体关系模型、关系数据库模型等。
- 状态图:用于描述系统各个状态及其转移条件。
- 活动图:用于描述系统流程中的各个活动及其关系。
- 序列图:描述系统中各个对象之间的交互过程和消息传递序列。
- 架构模型:包含系统的物理和逻辑结构,包括组件、模块、接口等。