第 一篇 开篇
第 1章 软件复杂度剖析 2
1.1 什么是复杂系统 2
1.2 理解能力 4
1.2.1 规模 4
1.2.2 结构 6
1.3 预测能力 9
1.3.1 过度设计 9
1.3.2 设计不足 11
第 2章 领域驱动设计概览 13
2.1 领域驱动设计的基本概念 14
2.1.1 领域驱动设计元模型 14
2.1.2 问题空间和解空间 16
2.1.3 战略设计和战术设计 17
2.1.4 领域模型驱动设计 18
2.2 领域驱动设计过程 19
2.3 控制软件复杂度 21
2.3.1 控制规模 21
2.3.2 清晰结构 23
2.3.3 响应变化 25
2.4 冷静认识 28
第3章 领域驱动设计统一过程 29
3.1 领域驱动设计现存的不足 30
3.2 领域驱动设计统一过程 31
3.2.1 统一过程的二维模型 31
3.2.2 统一过程的动态结构 33
3.2.3 统一过程的静态结构 36
第二篇 全局分析
第4章 问题空间探索 40
4.1 全局分析的5W模型 40
4.2 高效沟通 42
4.2.1 达成共识 42
4.2.2 统一语言 44
4.3 高效协作 49
4.3.1 商业模式画布 49
4.3.2 业务流程图 51
4.3.3 服务蓝图 52
4.3.4 用例图 54
4.3.5 事件风暴 55
4.3.6 学习循环 56
第5章 价值需求分析 57
5.1 识别利益相关者 57
5.1.1 什么是利益相关者 57
5.1.2 利益相关者的分类 58
5.2 明确系统愿景 61
5.3 确定系统范围 62
5.4 使用商业模式画布 64
第6章 业务需求分析 66
6.1 业务流程 66
6.1.1 业务流程的关键点 67
6.1.2 业务流程的分类 67
6.1.3 业务流程的呈现 67
6.2 业务场景 71
6.2.1 业务场景的5W模型 71
6.2.2 业务服务 72
6.2.3 业务服务的识别 75
6.2.4 业务服务的呈现 76
6.3 子领域 77
6.3.1 子领域元模型 78
6.3.2 子领域的划分 79
6.3.3 子领域映射图 80
第三篇 架构映射
第7章 同构系统 82
7.1 概念层次的同构系统 83
7.1.1 架构的定义 83
7.1.2 架构方案的推演 84
7.1.3 领域驱动架构风格 86
7.2 设计层次的同构系统 87
7.3 管理层次的同构系统 89
7.3.1 组建团队的原则 89
7.3.2 康威定律的运用 91
第8章 系统上下文 93
8.1 系统内和系统外 93
8.2 系统上下文 94
8.2.1 伴生系统 94
8.2.2 系统上下文图 95
8.3 系统上下文的确定 95
8.3.1 参考价值需求 95
8.3.2 业务序列图 96
第9章 限界上下文 98
9.1 限界上下文的定义 98
9.2 限界上下文的特征 101
9.2.1 领域模型的知识语境 101
9.2.2 业务能力的纵向切分 103
9.2.3 自治的架构单元 105
9.2.4 案例:供应链的商品模型 106
9.3 限界上下文的识别 111
9.3.1 业务维度 111
9.3.2 验证原则 115
9.3.3 管理维度 118
9.3.4 技术维度 120
第 10章 上下文映射 124
10.1 上下文映射概述 124
10.2 通信集成模式 126
10.2.1 防腐层 126
10.2.2 开放主机服务 128
10.2.3 发布语言 129
10.2.4 共享内核 131
10.3 团队协作模式 132
10.3.1 合作者 133
10.3.2 客户方/供应方 133
10.3.3 发布者/订阅者 135
10.3.4 分离方式 136
10.3.5 遵奉者 137
10.4 上下文映射的设计误区 138
10.4.1 语义关系形成的误区 138
10.4.2 对象模型形成的误区 139
10.5 上下文映射的确定 140
10.5.1 任务分解的影响 140
10.5.2 呈现上下文映射 143
第 11章 服务契约设计 145
11.1 消息契约 145
11.1.1 消息契约模型 145
11.1.2 消息契约的转换 147
11.2 服务契约 149
11.2.1 应用服务 150
11.2.2 远程服务 153
11.3 设计服务契约 160
11.3.1 业务服务的细化 160
11.3.2 服务序列图 162
11.3.3 服务契约的表示 163
第 12章 领域驱动架构 165
12.1 菱形对称架构 165
12.1.1 六边形架构 165
12.1.2 整洁架构思想 168
12.1.3 分层架构 169
12.1.4 演进为菱形对称架构 173
12.1.5 菱形对称架构的组成 177
12.1.6 引入上下文映射 179
12.1.7 改进的菱形对称架构 180
12.1.8 菱形对称架构的价值 182
12.1.9 菱形对称架构的运用 190
12.2 系统分层架构 197
12.2.1 关注点分离 197
12.2.2 映射子领域 198
12.2.3 边缘层 200
12.3 领域驱动架构风格 202
第四篇 领域建模
第 13章 模型驱动设计 206
13.1 软件系统中的模型 206
13.2 模型驱动设计 207
13.3 领域模型驱动设计 210
13.3.1 领域模型 210
13.3.2 共同建模 211
13.3.3 领域模型与统一语言 212
13.3.4 迭代建模 213
第 14章 领域分析建模 215
14.1 统一语言与领域分析模型 215
14.2 快速建模法 215
14.2.1 名词建模 217
14.2.2 动词建模 219
14.2.3 归纳抽象 221
14.2.4 确定关系 222
14.3 领域分析模型的精炼 222
14.4 领域分析模型与限界上下文 223
第 15章 领域模型设计要素 226
15.1 领域设计模型 226
15.1.1 理想的对象模型 226
15.1.2 战术设计元模型 227
15.1.3 模型元素的哲学依据 228
15.2 实体 229
15.2.1 身份标识 230
15.2.2 属性 234
15.2.3 领域行为 236
15.3 值对象 239
15.3.1 值对象与实体的本质区别 239
15.3.2 不变性 241
15.3.3 领域行为 242
15.3.4 值对象的优势 247
15.4 聚合 247
15.4.1 类的关系 247
15.4.2 模型的设计约束 249
15.4.3 聚合的定义与特征 252
15.4.4 聚合的设计原则 254
15.4.5 聚合的协作 260
15.5 聚合生命周期的管理 265
15.5.1 工厂 266
15.5.2 资源库 274
15.6 领域服务 280
15.6.1 聚合的问题 280
15.6.2 领域服务的特征 281
15.6.3 领域服务的运用场景 282
15.7 领域事件 287
15.7.1 建模思想的转变 287
15.7.2 领域事件的定义 289
15.7.3 对象建模范式的领域事件 290
第 16章 领域设计建模 295
16.1 角色构造型 295
16.1.1 角色构造型与领域驱动设计 296
16.1.2 领域驱动设计的角色构造型 297
16.2 设计聚合 301
16.2.1 理顺对象图 302
16.2.2 分解关系薄弱处 303
16.2.3 调整聚合边界 310
16.3 服务驱动设计 312
16.3.1 业务服务 312
16.3.2 业务服务的层次 313
16.3.3 服务驱动设计方法 313
16.3.4 服务驱动设计过程 315
16.3.5 业务服务的关键价值 323
第 17章 领域实现建模 324
17.1 稳定的领域模型 324
17.1.1 菱形对称架构与测试金字塔 325
17.1.2 测试形成的精炼文档 326
17.1.3 单元测试 327
17.2 测试优先的领域实现建模 329
17.2.1 测试驱动开发 329
17.2.2 测试驱动开发的节奏 331
17.2.3 简单设计 333
17.3 领域建模过程 334
17.3.1 薪资管理系统的需求说明 336
17.3.2 薪资管理系统的领域分析建模 336
17.3.3 薪资管理系统的领域设计建模 340
17.3.4 薪资管理系统的领域实现建模 351
第五篇 融合
第 18章 领域驱动设计的战略考量 362
18.1 限界上下文与微服务 362
18.1.1 进程内的通信边界 362
18.1.2 进程间的通信边界 364
18.1.3 限界上下文与微服务的关系 366
18.2 限界上下文之间的分布式通信 368
18.2.1 分布式通信的设计因素 368
18.2.2 分布式通信机制 369
18.3 命令查询职责的分离 377
18.3.1 CQS模式 377
18.3.2 CQRS模式的架构 378
18.3.3 命令总线的引入 379
18.3.4 事件溯源模式的引入 380
18.3.5 事件总线的引入 381
18.4 事务 383
18.4.1 本地事务 384
18.4.2 分布式事务 386
18.4.3 柔性事务 388
第 19章 领域驱动设计的战术考量 396
19.1 设计概念的统一语言 396
19.1.1 设计术语的统一 396
19.1.2 诸多XO 399
19.1.3 领域驱动设计的设计统一语言 402
19.2 领域模型的持久化 402
19.2.1 对象关系映射 403
19.2.2 JPA的应对之道 403
19.2.3 瞬态领域模型 413
19.2.4 领域模型与数据模型 415
19.3 资源库的实现 417
19.3.1 通用资源库的实现 417
19.3.2 资源库端口与适配器 419
19.3.3 聚合的领域纯粹性 420
19.3.4 领域服务的协调价值 420
第 20章 领域驱动设计体系 423
20.1 领域驱动设计的精髓 423
20.1.1 边界是核心 423
20.1.2 纪律是关键 425
20.2 领域驱动设计能力评估模型 426
20.2.1 敏捷迭代能力 427
20.2.2 需求分析能力 427
20.2.3 领域建模能力 428
20.2.4 架构设计能力 428
20.3 领域驱动设计参考过程模型 429
20.3.1 EAS案例背景 431
20.3.2 EAS的全局分析 431
20.3.3 EAS的架构映射 452
20.3.4 EAS的领域建模 467
20.3.5 EAS的融合设计 485
20.4 总结 495
附录
附录A 领域建模范式 498
A.1 结构建模范式 498
A.1.1 结构化编程的设计原则 498
A.1.2 结构化编程的问题 499
A.1.3 结构建模范式的设计模型 502
A.2 对象建模范式 507
A.2.1 职责 507
A.2.2 抽象 514
A.3 函数建模范式 522
A.3.1 代数数据类型 522
A.3.2 纯函数 525
A.3.3 函数建模范式的演绎法 530
附录B 事件驱动模型 533
B.1 事件风暴 534
B.1.1 理解事件风暴 534
B.1.2 探索业务全景 537
B.1.3 领域分析建模 543
B.1.4 事件风暴与建模范式 547
B.2 事件溯源模式 547
B.2.1 领域事件的定义 548
B.2.2 聚合的创建与更新 548
B.2.3 快照 551
B.2.4 面向聚合的事件溯源 552
B.2.5 聚合查询的改进 553
B.3 事件驱动架构 555
B.3.1 事件驱动架构风格 555
B.3.2 引入事件流 556
附录C 领域驱动设计魔方 561
C.1 发展过程的里程碑 561
C.2 领域驱动设计魔方 562
C.3 全局分析的魔方切面 563
C.3.1 业务角度 563
C.3.2 技术角度 564
C.3.3 管理角度 564
C.4 架构映射的魔方切面 565
C.4.1 业务角度 565
C.4.2 技术角度 566
C.4.3 管理角度 566
C.5 领域建模 566
C.5.1 业务角度 567
C.5.2 技术角度 567
C.5.3 管理角度 568
附录D 领域驱动设计统一过程交付物 569
D.1 价值需求 569
D.1.1 利益相关者 569
D.1.2 系统愿景 569
D.1.3 系统范围 569
D.2 业务需求 569
D.2.1 概述 569
D.2.2 业务流程 570
D.2.3 子领域1…n 570
D.3 系统上下文 571
D.3.1 概述 571
D.3.2 系统协作 571
D.4 业务架构 571
D.4.1 业务组件 571
D.4.2 业务架构视图 571
D.5 应用架构 571
D.5.1 应用组件 571
D.5.2 应用架构视图 572
D.6 子领域架构 572
D.6.1 核心子领域1…n 572
D.6.2 支撑子领域 572
D.6.3 通用子领域 572
参考文献 573