领域驱动设计
核心立场:DDD 不是一套建模技巧集合,而是一种在复杂业务系统中,通过语言、边界与模型压缩认知复杂度、协调组织协作的系统性方法论。

一、第一性原理层(Why)——DDD 为什么存在
1. 复杂系统的根本矛盾
- 业务复杂度随时间 **不可逆增长**
- 人类个体认知能力 **强约束**
- 团队协作导致 **认知分裂与语义漂移**
DDD 的根本问题:如何在长期演进的复杂系统中,让多个角色对“系统是什么、在做什么”保持一致理解。
2. DDD 的第一性原理
| 原理 | 本质解释 |
|---|---|
| 语言即模型 | 语言是认知的载体,不一致的语言必然导致不一致的系统 |
| 边界先于实现 | 不清晰的边界会放大复杂度 |
| 不变性优先 | 稳定的不变性是系统演进的锚点 |
| 模型是认知压缩 | 好模型 = 用更少概念表达更多规则 |
| 架构是组织的映射 | 系统结构反映沟通结构(Conway 定律) |
二、认知与语言层(What)——我们如何理解业务世界
1. 领域(Domain)
领域 = 一个被语言和规则定义的问题空间
- 不是“系统边界”
- 而是“业务问题的认知边界”
2. 子域(Subdomain)
子域是对领域的问题拆分方式:
| 子域类型 | 认知价值 | 战略意义 |
|---|---|---|
| 核心子域 | 差异化竞争力 | 投入最强人力 |
| 支撑子域 | 支持核心 | 可内部实现 |
| 通用子域 | 通用能力 | 可购买/外包 |
子域划分的本质:资源配置与注意力分配。
3. 通用语言(Ubiquitous Language)
通用语言 = 团队共享的业务世界观
- 业务人员、产品、研发使用**同一组术语**
- 语言变化 = 模型变化 = 系统变化
原则:
- 代码是通用语言的最终载体
- 文档仅用于解释“代码未表达的意图”
三、模型层(How)——如何构建可演化的认知结构
1. 模型的定义
模型 = 对现实知识的有意简化 + 结构化表达
模型的价值不在“是否完整”,而在:
- 是否帮助决策
- 是否约束行为
- 是否降低沟通成本
2. 有效建模的判定标准
| 维度 | 判定问题 |
|---|---|
| 可执行性 | 是否能指导代码结构? |
| 表达力 | 是否自然表达业务规则? |
| 稳定性 | 是否围绕不变性构建? |
| 演化性 | 是否允许逐步精进? |
3. 模型与实现的闭环
脱离实现的模型必然腐化
- 建模者必须参与编码
- 实现反向促进模型理解
四、战术设计层(Structure)——模型如何落地为结构
本层关注:在单一边界内,如何保持模型一致性
1. 实体(Entity)
- 由**身份标识**定义
- 拥有生命周期
- 业务行为应内聚于实体
2. 值对象(Value Object)
- 无身份
- 不可变
- 表达度量、描述、约束
3. 聚合(Aggregate)
聚合 = 一致性与不变性的最小边界
核心原则:
- 只通过聚合根访问
- 聚合内强一致
- 聚合之间最终一致
- 聚合要“小而自洽”
4. 领域服务(Domain Service)
- 表达**跨实体但仍属于领域的行为**
- 无状态
- 不应成为逻辑垃圾桶
5. Repository & Factory
- Factory:复杂对象/聚合的**原子创建**
- Repository:聚合的**生命周期访问接口**
二者的本质区别在于:创建 vs 已存在对象的获取
五、边界与协作层(Boundary)——如何在组织中保持一致性
1. 限界上下文(Bounded Context)
限界上下文 = 语言与模型的生效范围
- 同名 ≠ 同义
- 上下文是语义的防火墙
2. 上下文映射(Context Mapping)
上下文关系 = 组织协作关系
| 场景 | 推荐策略 |
|---|---|
| 强协作、强控制 | Shared Kernel |
| 受制于外部 | ACL |
| 收益低 | Separate Ways |
| 服务化输出 | Open Host Service |
六、演进与重构层(Evolution)——模型如何随认知成长
1. 重构的本质
DDD 重构 = 模型认知升级,而非代码洁癖
触发信号:
- 新理解无法表达
- 隐式规则过多
- 模型开始僵化
2. 从隐式到显式
- 提炼概念
- 引入 Specification
- 将过程行为转为对象职责
3. 突破与风险
- 质变来自持续量变
- 模型突破往往意味着系统级调整
七、战略设计层(Direction)——长期竞争力的来源
1. 核心域(Core Domain)
核心域 = 组织最值得投入认知与人才的地方
- 高复杂度
- 高差异化
- 高回报
2. 精炼与分离策略
- Generic Subdomain:降级处理
- Segregated Core:增强内聚
- Abstract Core:抽象不变性
八、适用边界与常见误区
1. DDD 不解决的问题
- 性能极限
- 人员能力差异
- 需求本身不清晰
2. 常见误区
- 所有系统都用 DDD
- 战术设计替代战略思考
- 把 DDD 当成代码规范
九、总结:DDD 的真正价值
DDD 的终极价值不在于“代码长什么样”,而在于:
- 团队是否拥有一致的业务世界观
- 系统是否围绕不变性演进
- 组织是否通过模型降低了复杂度
关联内容(自动生成)
- [/软件工程/微服务/服务建模.html](/软件工程/微服务/服务建模.html) 服务建模中详细讨论了DDD的聚合、实体、值对象等概念在微服务架构中的应用
- [/软件工程/架构/系统设计/业务建模.html](/软件工程/架构/系统设计/业务建模.html) 业务建模涵盖了DDD中的限界上下文、实体、值对象、聚合等核心概念
- [/软件工程/架构模式/分层架构.html](/软件工程/架构模式/分层架构.html) 分层架构与DDD紧密结合,DDD的分层架构将业务核心(Domain)作为稳定层
- [/软件工程/架构模式/基本模式.html](/软件工程/架构模式/基本模式.html) 基本模式中包含了值对象等DDD核心概念的详细说明
- [/软件工程/理论/结构化分析方法.html](/软件工程/理论/结构化分析方法.html) 结构化分析与DDD结合使用,结构化分析侧重信息流与过程,领域驱动设计侧重领域模型和业务逻辑封装
- [/数据技术/数据网格.html](/数据技术/数据网格.html) 数据网格采用领域驱动设计思想,通过领域导向的数据所有权实现数据架构的合理划分
- [/编程语言/JAVA/框架/ORM.html](/编程语言/JAVA/框架/ORM.html) ORM框架通过实体映射实现对象-关系映射,与DDD的实体概念相关联
- [/软件工程/设计模式/创建型模式.html](/软件工程/设计模式/创建型模式.html) 创建型模式在领域模型构建中发挥重要作用,与DDD中的工厂模式等概念相关