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