解構領域驅動設計

解構領域驅動設計

作者: 張逸
出版社: 人民郵電
出版在: 2021-09-01
ISBN-13: 9787115566232
ISBN-10: 7115566232
裝訂格式: 平裝
總頁數: 576 頁





內容描述


本書全面闡釋了領域驅動設計(domain-driven design,DDD)的知識體系,內容覆蓋領域驅動設計的主要模式與主流方法,並在此基礎上提出“領域驅動設計統一過程”(domain-driven design unified process,DDDUP),將整個軟件構建過程劃分為全局分析、架構映射和領域建模3個階段。除給出諸多案例來闡釋領域驅動設計統一過程中的方法與模式之外,本書還通過一個真實而完整的案例全面展現瞭如何進行領域驅動設計統一過程的實施和落地。為了更好地運用領域驅動設計統一過程,本書還開創性地引入了業務服務、菱形對稱架構、領域驅動架構、服務驅動設計等方法與模式,總結了領域驅動設計能力評估模型與參考過程模型。本書提出的一整套方法體系已在多個項目中推廣和落地。
本書適合希望領會軟件架構本質、提高軟件架構能力的軟件架構師,希望提高領域建模能力、打磨軟件設計能力的開發人員,希望掌握業務分析與建模方法的業務分析人員,希望學習領域驅動設計並將其運用到項目中的軟件行業從業人員閱讀參考。


目錄大綱


一篇 開篇 
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


作者介紹


張逸,高質量編碼實踐者、領域驅動設計佈道師、微服務系統架構師、大數據平台架構師、敏捷轉型諮詢師,曾就職於中興通訊、惠普、思特沃克(ThoughtWorks)、民航(成都)信息等企業,致力於大型軟件企業的分佈式架構設計、領域驅動設計、大數據平台架構設計以及垂直領域的企業架構規劃與建設,並為國內外多家企業提供技術培訓與諮詢服務。




相關書籍

Scrum 敏捷產品管理:打造客戶喜愛的產品 (Agile Product Management with Scrum: Creating Products that Customers Love)

作者 Roman Pichler 周龍鴻 主編 Scrum 敏捷產品管理志工群 譯

2021-09-01

Software Engineering, 10/e (IE-Paperback)

作者 Sommerville Ian

2021-09-01

An Introduction to Object Oriented Analysis: Object and UML in Plain English, 2/e

作者 David William Brown

2021-09-01