本書通過一個完整項目案例由淺入深地介紹了業(yè)務建模和軟件設計的方法論領域驅動設計(Domain Driven Design,DDD)。首先,本書介紹了DDD的基本概念和主流設計方法,同時引入貫穿全書的案例系統(tǒng),并完成案例系統(tǒng)的基礎設計;其次,圍繞DDD的統(tǒng)一語言、子域和限界上下文展開討論,探討從問題空間進入解空間的解決方案;再次,從領域建模范式講起,詳細分析實體、值對象、聚合、領域服務、應用服務和領域事件等DDD中與戰(zhàn)術設計相關的核心概念,并給出各個組件的設計方法和使用技巧;最后,圍繞常見領域驅動架構模式及DDD架構考量,給出DDD的架構設計和整合方案。
本書結構清晰、內容豐富、圖文并茂,適合團隊負責人、業(yè)務設計人員、系統(tǒng)設計人員以及架構師等閱讀。
實踐導向,通過工作坊形式,將理論與實踐緊密結合,使讀者能夠在實際操作中學習和掌握DDD;
案例豐富,將綜合項目案例系統(tǒng)拆分成多個子系統(tǒng),幫助讀者深入理解DDD在不同場景下的應用;
全面覆蓋,從基礎概念到架構設計,涵蓋DDD的各個方面,為讀者提供全面的學習路徑;
易于理解,以清晰的結構和語言,確保復雜的概念易于理解,便于讀者快速掌握DDD的核心思想。
注重實用,附贈講解視頻,豐富學習方式。
鄭天民,日本足利工業(yè)大學信息工程學碩士,擁有十余年軟件行業(yè)從業(yè)經(jīng)驗,目前在一家大健康領域的創(chuàng)新型科技公司擔任CTO,負責產(chǎn)品研發(fā)與技術團隊管理工作。他開發(fā)過十余個面向開發(fā)人員的技術和管理類培訓課程項目,在架構設計和技術管理方面有豐富的經(jīng)驗。他是阿里云MVP、騰訊云TVP、TGO鯤鵬會會員。他著有《Apache ShardingSphere實戰(zhàn)》《Spring響應式微服務:Spring Boot 2 Spring 5 Spring Cloud實戰(zhàn)》《系統(tǒng)架構設計》《微服務設計原理與架構》《Spring Security原理與實踐》等圖書。
基礎概念篇
第 1章 領域驅動設計體系 2
1.1 軟件復雜度剖析 2
1.1.1 軟件復雜度與規(guī)模 3
1.1.2 軟件復雜度與結構 6
1.1.3 軟件復雜度與變化 10
1.2 引入領域驅動設計 14
1.2.1 領域驅動設計基礎 14
1.2.2 領域驅動戰(zhàn)略設計 18
1.2.3 領域驅動戰(zhàn)術設計 20
1.2.4 領域驅動設計和軟件復雜度 24
1.3 領域驅動設計與架構融合 28
1.3.1 領域驅動設計與單體應用 28
1.3.2 領域驅動設計與微服務架構 29
1.3.3 領域驅動設計與中臺架構 30
1.4 本章小結 31
第 2章 工作坊案例系統(tǒng) 32
2.1 工作坊的基本概念和開展方式 32
2.1.1 工作坊的基本概念 32
2.1.2 準備工作 33
2.1.3 流程和階段 35
2.2 案例系統(tǒng)介紹 36
2.3 案例系統(tǒng)基礎設計 37
2.3.1 基礎設計目標 37
2.3.2 基礎設計流程 38
2.3.3 基礎設計交付物 39
2.4 本章小結 44
戰(zhàn)略設計篇
第3章 統(tǒng)一語言與子域 46
3.1 統(tǒng)一語言 46
3.1.1 溝通的問題和策略 46
3.1.2 統(tǒng)一語言的結構化表述 48
3.1.3 統(tǒng)一語言的實現(xiàn)模式 50
3.2 子域 53
3.2.1 子域的劃分方法 54
3.2.2 子域的分類和映射 54
3.3 本章小結 56
第4章 限界上下文 57
4.1 引入限界上下文 57
4.1.1 限界上下文的定義 58
4.1.2 限界上下文的特性 59
4.1.3 限界上下文的設計 62
4.2 識別限界上下文 63
4.2.1 從業(yè)務維度識別限界上下文 63
4.2.2 從工作維度識別限界上下文 65
4.2.3 從技術維度識別限界上下文 65
4.3 限界上下文映射 67
4.3.1 上下游關系和映射 67
4.3.2 團隊協(xié)作模式 68
4.3.3 通信集成模式 72
4.3.4 影響上下文映射的考量點 76
4.4 限界上下文案例講解 79
4.5 本章小結 82
第5章 事件風暴 83
5.1 探索業(yè)務全景 83
5.2 實施事件風暴 84
5.2.1 事件風暴基本概念 84
5.2.2 事件風暴實施方法 89
5.3 事件風暴應用實踐 97
5.3.1 事件風暴流程裁剪 97
5.3.2 事件風暴最佳實踐 98
5.4 事件風暴案例講解 100
5.5 本章小結 101
第6章 戰(zhàn)略設計工作坊演練 102
6.1 案例系統(tǒng)戰(zhàn)略設計 102
6.1.1 戰(zhàn)略設計目標 102
6.1.2 戰(zhàn)略設計流程 103
6.2 戰(zhàn)略設計工作坊演練環(huán)節(jié) 104
6.2.1 事件建模 104
6.2.2 聚合分析 108
6.2.3 子域劃分 116
6.2.4 限界上下文映射 118
6.3 戰(zhàn)略設計工作坊演練最佳實踐 120
6.3.1 事件的建模 122
6.3.2 核心領域概念的處理 123
6.4 本章小結 124
戰(zhàn)術設計篇
第7章 實體和值對象 126
7.1 控制類的組成 126
7.2 實體 128
7.2.1 實體的唯一標識和屬性 128
7.2.2 實體的領域行為 131
7.3 值對象 133
7.3.1 值對象的識別 133
7.3.2 值對象的特征 134
7.4 實體和值對象建模案例講解 136
7.5 本章小結 138
第8章 聚合 140
8.1 控制類的關系 140
8.2 引入聚合 141
8.2.1 聚合的定義和特征 142
8.2.2 聚合的設計原則 143
8.3 聚合的協(xié)作方式 144
8.3.1 聚合的關聯(lián)關系 145
8.3.2 聚合的依賴關系 147
8.4 聚合生命周期管理 147
8.4.1 工廠 148
8.4.2 資源庫 149
8.5 聚合設計案例講解 153
8.6 本章小結 155
第9章 服務、事件與基礎設施 156
9.1 領域服務 156
9.1.1 領域服務的示例 156
9.1.2 領域服務的應用場景 157
9.2 應用服務 159
9.2.1 應用服務的定位 159
9.2.2 應用服務的應用場景 162
9.2.3 應用服務的設計原則 164
9.3 領域事件 166
9.3.1 領域事件和事件驅動架構 166
9.3.2 領域事件的發(fā)布和訂閱 168
9.4 基礎設施 172
9.5 本章小結 174
第 10章 戰(zhàn)術設計工作坊演練 175
10.1 案例系統(tǒng)戰(zhàn)術設計 175
10.1.1 戰(zhàn)術設計目標 175
10.1.2 戰(zhàn)術設計流程 176
10.2 戰(zhàn)術設計工作坊演練環(huán)節(jié) 177
10.2.1 戰(zhàn)術設計效果展示 177
10.2.2 設計聚合、實體和值對象 178
10.2.3 設計事件和服務 180
10.2.4 設計限界上下文核心業(yè)務操作 181
10.3 戰(zhàn)術設計工作坊演練最佳實踐 185
10.3.1 聚合的設計 185
10.3.2 值對象的設計 186
10.4 本章小結 187
架構設計篇
第 11章 領域驅動實現(xiàn)架構 190
11.1 常見領域驅動架構模式 190
11.1.1 DDD經(jīng)典分層架構 190
11.1.2 DDD整潔架構 194
11.1.3 DDD六邊形架構 195
11.1.4 DDD架構的映射性 197
11.2 領域驅動設計的架構考量 198
11.2.1 限界上下文的物理表現(xiàn) 199
11.2.2 CQRS和DDD 202
11.2.3 事件溯源和CQRS 205
11.2.4 數(shù)據(jù)一致性 208
11.3 本章小結 209
第 12章 架構設計工作坊演練 210
12.1 案例系統(tǒng)架構設計 210
12.1.1 架構設計目標 210
12.1.2 架構設計流程 211
12.2 架構設計工作坊演練環(huán)節(jié) 212
12.2.1 劃分業(yè)務服務 212
12.2.2 確定業(yè)務服務操作 213
12.2.3 觸發(fā)領域事件 214
12.2.4 實現(xiàn)業(yè)務服務交互 215
12.3 架構設計工作坊演練最佳實踐 216
12.3.1 整合戰(zhàn)略設計和戰(zhàn)術設計 219
12.3.2 事件與柔性事務 219
12.3.3 查詢類操作的設計 220
12.4 本章小結 222