第 一篇 開篇
第 1章 軟件復雜度剖析 2
1.1 什么是復雜系統(tǒng) 2
1.2 理解能力 4
1.2.1 規(guī)模 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 戰(zhàn)略設計和戰(zhàn)術設計 17
2.1.4 領域模型驅動設計 18
2.2 領域驅動設計過程 19
2.3 控制軟件復雜度 21
2.3.1 控制規(guī)模 21
2.3.2 清晰結構 23
2.3.3 響應變化 25
2.4 冷靜認識 28
第3章 領域驅動設計統(tǒng)一過程 29
3.1 領域驅動設計現存的不足 30
3.2 領域驅動設計統(tǒng)一過程 31
3.2.1 統(tǒng)一過程的二維模型 31
3.2.2 統(tǒng)一過程的動態(tài)結構 33
3.2.3 統(tǒng)一過程的靜態(tài)結構 36
第二篇 全局分析
第4章 問題空間探索 40
4.1 全局分析的5W模型 40
4.2 高效溝通 42
4.2.1 達成共識 42
4.2.2 統(tǒng)一語言 44
4.3 高效協(xié)作 49
4.3.1 商業(yè)模式畫布 49
4.3.2 業(yè)務流程圖 51
4.3.3 服務藍圖 52
4.3.4 用例圖 54
4.3.5 事件風暴 55
4.3.6 學習循環(huán) 56
第5章 價值需求分析 57
5.1 識別利益相關者 57
5.1.1 什么是利益相關者 57
5.1.2 利益相關者的分類 58
5.2 明確系統(tǒng)愿景 61
5.3 確定系統(tǒng)范圍 62
5.4 使用商業(yè)模式畫布 64
第6章 業(yè)務需求分析 66
6.1 業(yè)務流程 66
6.1.1 業(yè)務流程的關鍵點 67
6.1.2 業(yè)務流程的分類 67
6.1.3 業(yè)務流程的呈現 67
6.2 業(yè)務場景 71
6.2.1 業(yè)務場景的5W模型 71
6.2.2 業(yè)務服務 72
6.2.3 業(yè)務服務的識別 75
6.2.4 業(yè)務服務的呈現 76
6.3 子領域 77
6.3.1 子領域元模型 78
6.3.2 子領域的劃分 79
6.3.3 子領域映射圖 80
第三篇 架構映射
第7章 同構系統(tǒng) 82
7.1 概念層次的同構系統(tǒng) 83
7.1.1 架構的定義 83
7.1.2 架構方案的推演 84
7.1.3 領域驅動架構風格 86
7.2 設計層次的同構系統(tǒng) 87
7.3 管理層次的同構系統(tǒng) 89
7.3.1 組建團隊的原則 89
7.3.2 康威定律的運用 91
第8章 系統(tǒng)上下文 93
8.1 系統(tǒng)內和系統(tǒng)外 93
8.2 系統(tǒng)上下文 94
8.2.1 伴生系統(tǒng) 94
8.2.2 系統(tǒng)上下文圖 95
8.3 系統(tǒng)上下文的確定 95
8.3.1 參考價值需求 95
8.3.2 業(yè)務序列圖 96
第9章 限界上下文 98
9.1 限界上下文的定義 98
9.2 限界上下文的特征 101
9.2.1 領域模型的知識語境 101
9.2.2 業(yè)務能力的縱向切分 103
9.2.3 自治的架構單元 105
9.2.4 案例:供應鏈的商品模型 106
9.3 限界上下文的識別 111
9.3.1 業(yè)務維度 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 發(fā)布語言 129
10.2.4 共享內核 131
10.3 團隊協(xié)作模式 132
10.3.1 合作者 133
10.3.2 客戶方/供應方 133
10.3.3 發(fā)布者/訂閱者 135
10.3.4 分離方式 136
10.3.5 遵奉者 137
10.4 上下文映射的設計誤區(qū) 138
10.4.1 語義關系形成的誤區(qū) 138
10.4.2 對象模型形成的誤區(qū) 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 業(yè)務服務的細化 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 系統(tǒng)分層架構 197
12.2.1 關注點分離 197
12.2.2 映射子領域 198
12.2.3 邊緣層 200
12.3 領域驅動架構風格 202
第四篇 領域建模
第 13章 模型驅動設計 206
13.1 軟件系統(tǒng)中的模型 206
13.2 模型驅動設計 207
13.3 領域模型驅動設計 210
13.3.1 領域模型 210
13.3.2 共同建模 211
13.3.3 領域模型與統(tǒng)一語言 212
13.3.4 迭代建模 213
第 14章 領域分析建模 215
14.1 統(tǒng)一語言與領域分析模型 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 戰(zhàn)術設計元模型 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 值對象與實體的本質區(qū)別 239
15.3.2 不變性 241
15.3.3 領域行為 242
15.3.4 值對象的優(yōu)勢 247
15.4 聚合 247
15.4.1 類的關系 247
15.4.2 模型的設計約束 249
15.4.3 聚合的定義與特征 252
15.4.4 聚合的設計原則 254
15.4.5 聚合的協(xié)作 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 業(yè)務服務 312
16.3.2 業(yè)務服務的層次 313
16.3.3 服務驅動設計方法 313
16.3.4 服務驅動設計過程 315
16.3.5 業(yè)務服務的關鍵價值 323
第 17章 領域實現建模 324
17.1 穩(wěn)定的領域模型 324
17.1.1 菱形對稱架構與測試金字塔 325
17.1.2 測試形成的精煉文檔 326
17.1.3 單元測試 327
17.2 測試優(yōu)先的領域實現建模 329
17.2.1 測試驅動開發(fā) 329
17.2.2 測試驅動開發(fā)的節(jié)奏 331
17.2.3 簡單設計 333
17.3 領域建模過程 334
17.3.1 薪資管理系統(tǒng)的需求說明 336
17.3.2 薪資管理系統(tǒng)的領域分析建模 336
17.3.3 薪資管理系統(tǒng)的領域設計建模 340
17.3.4 薪資管理系統(tǒng)的領域實現建模 351
第五篇 融合
第 18章 領域驅動設計的戰(zhàn)略考量 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章 領域驅動設計的戰(zhàn)術考量 396
19.1 設計概念的統(tǒng)一語言 396
19.1.1 設計術語的統(tǒng)一 396
19.1.2 諸多XO 399
19.1.3 領域驅動設計的設計統(tǒng)一語言 402
19.2 領域模型的持久化 402
19.2.1 對象關系映射 403
19.2.2 JPA的應對之道 403
19.2.3 瞬態(tài)領域模型 413
19.2.4 領域模型與數據模型 415
19.3 資源庫的實現 417
19.3.1 通用資源庫的實現 417
19.3.2 資源庫端口與適配器 419
19.3.3 聚合的領域純粹性 420
19.3.4 領域服務的協(xié)調價值 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 探索業(yè)務全景 537
B.1.3 領域分析建模 543
B.1.4 事件風暴與建模范式 547
B.2 事件溯源模式 547
B.2.1 領域事件的定義 548
B.2.2 聚合的創(chuàng)建與更新 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 發(fā)展過程的里程碑 561
C.2 領域驅動設計魔方 562
C.3 全局分析的魔方切面 563
C.3.1 業(yè)務角度 563
C.3.2 技術角度 564
C.3.3 管理角度 564
C.4 架構映射的魔方切面 565
C.4.1 業(yè)務角度 565
C.4.2 技術角度 566
C.4.3 管理角度 566
C.5 領域建模 566
C.5.1 業(yè)務角度 567
C.5.2 技術角度 567
C.5.3 管理角度 568
附錄D 領域驅動設計統(tǒng)一過程交付物 569
D.1 價值需求 569
D.1.1 利益相關者 569
D.1.2 系統(tǒng)愿景 569
D.1.3 系統(tǒng)范圍 569
D.2 業(yè)務需求 569
D.2.1 概述 569
D.2.2 業(yè)務流程 570
D.2.3 子領域1…n 570
D.3 系統(tǒng)上下文 571
D.3.1 概述 571
D.3.2 系統(tǒng)協(xié)作 571
D.4 業(yè)務架構 571
D.4.1 業(yè)務組件 571
D.4.2 業(yè)務架構視圖 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