《領域驅動設計:業務建模與架構實踐》是2023年機械工業出版社出版的圖書。
基本介紹
- 中文名:領域驅動設計:業務建模與架構實踐
- 作者:王紅亮
- 出版時間:2023年11月
- 出版社:機械工業出版社
- ISBN:9787111737544
- 類別:程式設計
- 開本:16 開
- 裝幀:平裝
內容簡介,圖書目錄,
內容簡介
這是一本從業務和架構視角講解DDD的基本原則、底層邏輯、落地難點、落地方法和進階技巧的實戰性著作。DDD的理論體系複雜,學習和實踐門檻較高,已有的關於DDD的著作或多或少存在理論描述難理解、案例示範難落地等問題,阻礙了DDD在實踐中的套用。本書作者有20餘年的軟體研發經驗,對DDD有深刻的理解,深諳DDD實踐過程中的痛點,他在這本書中高屋建瓴、化繁為簡,讓讀者有撥雲見霧之感。理論部分(第1~3章)從軟體工程的基本思想出發,首先分析了DDD產生的原因,並由此推論出DDD的基本原則,這些內容是學習本書的基礎;緊接著分析了DDD落地的難點,幫助讀者掃清障礙;然後提煉出了DDD的成熟度模型,包括DDD的戰略、戰術和衡量指標。這些內容極具針對性和獨創性,是研發團隊必須掌握的,也是目前同類書中很少講的。實戰部分(第4~10章)從業務建模和架構的角度切入,首先用搭積木的方式講解和演示了DDD項目由簡易到複雜的落地過程,包含大量的業務建模場景和案例,涉及如何套用通用語言、如何建模領域邏輯、如何套用上下文和子域切分系統以及如何保持語言、模型、代碼的一致性等重要內容;然後講解了如何將各種設計模式套用到DDD中,以及如何設計出能讓DDD更好落地的系統架構。這些內容兼具實操性和思想性,充滿經驗和智慧,在同類書中同樣也不多見。
圖書目錄
目 錄 Contents
前言
第1章 DDD的基本原則與價值分析1
1.1 DDD的初心1
1.1.1 軟體項目成敗的關鍵1
1.1.2 兩個亟須驗證的事實3
1.2 DDD的基本原則6
1.2.1 DDD的兩個基本原則7
1.2.2 原則的底層邏輯10
1.3 DDD的價值分析12
1.3.1 複雜度控制12
1.3.2 架構原則16
1.3.3 團隊協作20
1.4 關於DDD原則的案例23
第2章 DDD落地難點分析35
2.1 DDD的適用範圍35
2.1.1 領域特性36
2.1.2 團隊成熟度38
2.1.3 適用性評分表39
2.2 5個常見誤區39
2.3 文化的變革44
2.3.1 領域專家的邊界44
2.3.2 設計師的錘子46
2.3.3 開發人員的輪子47
2.4 團隊的挑戰48
2.4.1 管理者的責任48
2.4.2 開發團隊的意識和技能50
2.4.3 角色重新定位51
2.5 測試、過程和架構的佳搭檔52
2.5.1 測試的佳搭檔:TDD和
單元測試52
2.5.2 過程的佳搭檔:敏捷過程
和DevOps54
2.5.3 架構的佳搭檔:六邊形、
洋蔥和分層架構56
第3章 DDD成熟度模型59
3.1 成熟度模型的目的及特殊性59
3.2 5個度量維度60
3.3 3級成熟度模型63
第4章 模型的要素—用例、
視圖和構造塊68
4.1 模型的構建步驟68
4.2 模型的場景:用例69
4.2.1 用例的定義69
4.2.2 用例的目的70
4.2.3 發現用例72
4.2.4 用例的編寫73
4.3 模型的數據:類圖76
4.3.1 屬性77
4.3.2 方法78
4.3.3 注釋、約束和關鍵字79
4.3.4 依賴和限定關聯80
4.3.5 聚合與組合82
4.4 模型的行為:互動圖83
4.4.1 時序圖84
4.4.2 協作圖89
4.4.3 互動圖與類圖的關係91
4.5 模型的變化:操作契約92
4.5.1 作用93
4.5.2 後置條件94
4.5.3 準則94
4.6 模型的構造塊:實體、值對象、
領域服務95
4.6.1 實體95
4.6.2 值對象99
4.6.3 實體與值對象的比較103
4.6.4 領域服務105
第5章 從語言到模型—基礎
模型構建108
5.1 設計目標108
5.2 設計之前的準備工作110
5.2.1 語言110
5.2.2 角色111
5.2.3 溝通111
5.2.4 方法113
5.2.5 工具113
5.2.6 時間115
5.3 領域模型的構建115
5.3.1 發掘領域概念116
5.3.2 創建關聯118
5.3.3 定義屬性123
5.3.4 分配職責125
5.3.5 觸發事件128
5.3.6 處理異常134
5.4 典型的領域邏輯建模137
5.4.1 規則與約束137
5.4.2 流程與分支140
5.4.3 驗證與篩選142
5.4.4 算法與計算144
5.4.5 時間與空間146
5.4.6 有狀態與無狀態149
5.4.7 同步與異步150
5.5 典型案例151
5.5.1 案例1:線上購物網站152
5.5.2 案例2:汽車租賃系統153
5.5.3 案例3:銀行系統154
第6章 精煉模型—深入模型設計156
6.1 模型引力場:聚合156
6.1.1 聚合的定義及作用157
6.1.2 聚合規則158
6.1.3 聚合設計法則158
6.1.4 實現方法161
6.2 模型裝配線:工廠163
6.2.1 為什麼需要工廠163
6.2.2 廠址選擇169
6.3 模型貨架:存儲庫171
6.3.1 為什麼需要存儲庫171
6.3.2 存儲庫接口175
6.3.3 存儲庫與工廠的區別176
6.3.4 存儲庫與數據訪問對象的區別177
6.3.5 存儲庫實現的注意事項177
6.4 富二代的煩惱:基類與繼承178
6.4.1 抽象、泛化與DDD178
6.4.2 通用語言與基類179
6.4.3 為多態去繼承181
6.4.4 合格的子類、自然的繼承關係:
Liskov原則182
6.4.5 抽象類與接口的選擇183
6.5 模型質量:優秀的開發組件 184
6.5.1 精心設計領域模型的特徵184
6.5.2 模型設計的基本原則186
6.5.3 為擴展性而設計188
第7章 分而治之—上下文、
模組和子域191
7.1 分離用例、模型和團隊:上下文191
7.1.1 什麼是上下文191
7.1.2 為什麼需要上下文193
7.1.3 上下文的識別方法195
7.1.4 識別上下文的步驟199
7.1.5 同一上下文工作法200
7.1.6 跨上下文團隊工作法202
7.2 重用性和穩定性:模組207
7.2.1 包的內聚性原則207
7.2.2 包的耦合性原則209
7.3 區別特殊性與一般性:子域211
7.3.1 核心競爭力:核心域211
7.3.2 周邊業務:支撐域215
7.3.3 通用能力:通用域215
7.4 上下文、模組和子域之間的關係216
7.4.1 上下文和子域的關係216
7.4.2 上下文和模組的關係216
7.4.3 子域和模組的關係217
第8章 關鍵細節—從模型到代碼218
8.1 DDD 中的代碼要求