悟道領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)
定 價(jià):118 元
- 作者:覃玉杰
- 出版時(shí)間:2024/10/1
- ISBN:9787121489792
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP311.1
- 頁(yè)碼:412
- 紙張:
- 版次:01
- 開本:16開
本書系統(tǒng)介紹領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的理論知識(shí)與實(shí)踐方法,不僅講解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的戰(zhàn)術(shù)設(shè)計(jì)(如實(shí)體、值對(duì)象、聚合、聚合根、領(lǐng)域服務(wù)、領(lǐng)域事件等)、戰(zhàn)略設(shè)計(jì)(如限界上下文、上下文映射、子域等)、領(lǐng)域建模等理論知識(shí),還探討領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的應(yīng)用架構(gòu)、類型變化鏈、一致性、CQRS、事件溯源、編碼指南、架構(gòu)可視化(基于C4模型)等工程實(shí)踐,探索如何將領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)與當(dāng)前業(yè)界流行的開發(fā)方法(如低代碼、敏捷開發(fā)、測(cè)試驅(qū)動(dòng)開發(fā)等)融合,使領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)成為真正可落地的開發(fā)方法。本書在介紹概念時(shí),為概念提供了代碼層面的講解,這樣可以極大地降低讀者對(duì)概念的理解門檻。此外,書中還提供兩個(gè)熱門領(lǐng)域的項(xiàng)目案例——開發(fā)視頻直播服務(wù)和AIGC產(chǎn)品,幫助讀者理解、掌握、應(yīng)用領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)。
互聯(lián)網(wǎng)一線開發(fā)者、資深架構(gòu)師和研發(fā)負(fù)責(zé)人。擅長(zhǎng)復(fù)雜場(chǎng)景下的業(yè)務(wù)需求落地,在電商、直播、互聯(lián)網(wǎng)健康、互聯(lián)網(wǎng)金融、物流供應(yīng)鏈、電子政務(wù)等領(lǐng)域擁有豐富的實(shí)踐經(jīng)驗(yàn);設(shè)計(jì)、重構(gòu)、維護(hù)過(guò)多個(gè)百萬(wàn)級(jí)QPS的P0級(jí)服務(wù),多次參加“618”、“雙十一”大促活動(dòng),具備豐富的高性能、高并發(fā)、高可用系統(tǒng)設(shè)計(jì)開發(fā)經(jīng)驗(yàn);多次從 0 到 1 組建研發(fā)團(tuán)隊(duì),推動(dòng)研發(fā)體系搭建、研發(fā)規(guī)范制定、團(tuán)隊(duì)文化建設(shè)、團(tuán)隊(duì)成長(zhǎng)規(guī)劃和技術(shù)能力培訓(xùn);熱衷技術(shù)精進(jìn)和知識(shí)分享,維護(hù)多個(gè)開源項(xiàng)目,運(yùn)營(yíng)微信公眾號(hào)“悟道領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)”。
第1 章 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)預(yù)熱 / 1
1.1 初步理解領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 1
1.1.1 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的簡(jiǎn)史 / 1
1.1.2 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的基本內(nèi)容 / 1
1.1.3 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的意義 / 3
1.1.4 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的困境 / 5
1.2 如何學(xué)習(xí)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 6
1.2.1 學(xué)習(xí)難點(diǎn) / 6
1.2.2 學(xué)習(xí)路線 / 6
1.3 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)常見爭(zhēng)議探討 / 8
1.3.1 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的適用范圍 / 8
1.3.2 貧血模型與充血模型的選擇 / 10
1.3.3 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)落地的認(rèn)知差異 / 10
1.3.4 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的技術(shù)選型 / 11
1.3.5 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)與面向?qū)ο缶幊?/ 12
1.3.6 不要過(guò)度迷信領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 13
第2 章 應(yīng)用架構(gòu) / 14
2.1 貧血模型和充血模型 / 14
2.1.1 對(duì)象的屬性和行為 / 14
2.1.2 貧血模型 / 14
2.1.3 充血模型 / 15
2.1.4 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)對(duì)模型的要求 / 15
2.2 經(jīng)典貧血三層架構(gòu) / 16
2.2.1 解讀貧血三層架構(gòu) / 16
2.2.2 貧血三層架構(gòu)的優(yōu)點(diǎn) / 17
2.2.3 貧血三層架構(gòu)的問(wèn)題 / 17
2.3 DDD 常見的應(yīng)用架構(gòu) / 18
2.3.1 經(jīng)典的四層架構(gòu) / 18
2.3.2 端口和適配器架構(gòu) / 19
2.4 應(yīng)用架構(gòu)演化 / 22
2.4.1 合并數(shù)據(jù)模型 / 22
2.4.2 抽取領(lǐng)域模型 / 22
2.4.3 維護(hù)領(lǐng)域?qū)ο笊芷?/ 24
2.4.4 泛化抽象 / 26
2.4.5 完整的項(xiàng)目結(jié)構(gòu) / 28
2.5 領(lǐng)域?qū)ο蟮纳芷?/ 29
2.5.1 領(lǐng)域?qū)ο蟮纳芷诮榻B / 29
2.5.2 領(lǐng)域?qū)ο蟮膭?chuàng)建過(guò)程 / 29
2.5.3 領(lǐng)域?qū)ο蟮谋4孢^(guò)程 / 31
2.5.4 領(lǐng)域?qū)ο蟮闹亟ㄟ^(guò)程 / 31
2.5.5 領(lǐng)域?qū)ο蟮臍w檔過(guò)程 / 33
2.6 應(yīng)用架構(gòu)的類型變化鏈 / 33
2.6.1 應(yīng)用架構(gòu)各層的對(duì)象類型 / 33
2.6.2 查詢過(guò)程的類型變化 / 36
2.6.3 創(chuàng)建過(guò)程的類型轉(zhuǎn)換 / 40
2.6.4 修改過(guò)程的類型轉(zhuǎn)換 / 43
第3 章 實(shí)體和值對(duì)象 / 45
3.1 實(shí)體 / 45
3.1.1 實(shí)體的概念 / 45
3.1.2 實(shí)體的建模 / 45
3.1.3 實(shí)體的創(chuàng)建 / 48
3.1.4 實(shí)體的重建 / 48
3.2 值對(duì)象 / 49
3.2.1 值對(duì)象的概念 / 49
3.2.2 值對(duì)象的實(shí)現(xiàn) / 49
3.2.3 值對(duì)象的建模 / 50
3.2.4 無(wú)副作用的值對(duì)象方法 / 51
3.2.5 值對(duì)象的創(chuàng)建 / 52
3.2.6 Domain Primitive / 53
3.3 無(wú)副作用函數(shù) / 54
3.3.1 無(wú)副作用函數(shù)的定義 / 54
3.3.2 無(wú)副作用函數(shù)的實(shí)現(xiàn) / 56
第4 章 聚合與聚合根 / 57
4.1 領(lǐng)域模型相關(guān)概念梳理 / 57
4.2 聚合與聚合根的定義 / 58
4.3 聚合與聚合根的作用 / 59
4.4 聚合設(shè)計(jì)的原則 / 62
4.4.1 設(shè)計(jì)小而全的聚合 / 62
4.4.2 通過(guò)唯一標(biāo)識(shí)引用其他聚合根 / 62
4.4.3 一個(gè)事務(wù)只更新單個(gè)聚合 / 63
4.4.4 跨聚合采用最終一致性 / 64
4.5 聚合的拆分 / 64
4.5.1 第一次拆分 / 65
4.5.2 第二次拆分 / 65
4.6 聚合根的配套組件 / 66
第5 章 Factory、Repository 和領(lǐng)域服務(wù) / 67
5.1 Factory / 67
5.1.1 Factory 的定義 / 67
5.1.2 Factory 的實(shí)現(xiàn) / 67
5.1.3 Factory 的職責(zé)辨析 / 68
5.2 Repository / 68
5.2.1 Repository 的定義 / 68
5.2.2 Repository 的實(shí)現(xiàn) / 68
5.2.3 Repository 實(shí)戰(zhàn) / 69
5.3 領(lǐng)域服務(wù) / 79
5.3.1 領(lǐng)域服務(wù)的基本概念 / 79
5.3.2 領(lǐng)域服務(wù)的特點(diǎn) / 80
5.3.3 領(lǐng)域服務(wù)實(shí)戰(zhàn) / 80
5.3.4 領(lǐng)域服務(wù)與應(yīng)用服務(wù)的區(qū)別 / 81
第6 章 設(shè)計(jì)模式 / 82
6.1 設(shè)計(jì)模式與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 82
6.2 責(zé)任鏈模式 / 82
6.2.1 責(zé)任鏈模式的定義 / 82
6.2.2 責(zé)任鏈的案例代碼 / 83
6.2.3 責(zé)任鏈框架?模式 / 89
6.2.4 在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中使用責(zé)任鏈
6.3 策略模式 / 90
6.3.1 策略模式的定義 / 90
6.3.2 策略模式的案例代碼 / 91
6.3.3 在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中使用策略
模式 / 92
6.4 橋接模式 / 96
6.4.1 橋接模式的定義 / 96
6.4.2 橋接模式的案例代碼 / 97
6.4.3 在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中使用橋接
模式 / 100
6.5 規(guī)約模式 / 106
6.5.1 規(guī)約模式的定義 / 106
6.5.2 規(guī)約模式的應(yīng)用場(chǎng)景 / 107
6.5.3 規(guī)約模式的案例代碼 / 107
6.5.4 在領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)中使用規(guī)約模式 / 111
6.5.5 規(guī)約模式的使用誤區(qū) / 112
第7 章 防腐層 / 113
7.1 防腐層的概念理解 / 113
7.2 防腐層的實(shí)現(xiàn)方案 / 115
7.2.1 適配器模式的定義 / 115
7.2.2 適配器模式的實(shí)現(xiàn) / 116
7.2.3 使用適配器模式實(shí)現(xiàn)防腐層 / 118
7.3 防腐層的實(shí)現(xiàn)要點(diǎn)總結(jié) / 121
7.3.1 封裝技術(shù)細(xì)節(jié) / 121
7.3.2 盡量簡(jiǎn)單且穩(wěn)定 / 121
7.3.3 入?yún)⒑统鰠楸镜厣舷挛闹祵?duì)象或基本數(shù)據(jù)類型 / 122
7.3.4 將外部異常轉(zhuǎn)為本地異常 / 122
7.3.5 將外部錯(cuò)誤碼轉(zhuǎn)為本地異常 / 123
7.3.6 按需返回 / 123
7.3.7 不在實(shí)體和值對(duì)象中調(diào)用防腐層 / 124
第8 章 領(lǐng)域事件 / 126
8.1 冪等設(shè)計(jì) / 126
8.1.1 冪等設(shè)計(jì)的定義 / 126
8.1.2 寫操作的冪等性 / 126
8.1.3 冪等設(shè)計(jì)的實(shí)現(xiàn)方案 / 127
8.2 領(lǐng)域事件建模 / 130
8.2.1 領(lǐng)域事件的概念 / 130
8.2.2 領(lǐng)域事件的應(yīng)用 / 131
8.2.3 領(lǐng)域事件的消息體 / 131
8.2.4 領(lǐng)域事件的建模實(shí)現(xiàn) / 132
8.3 領(lǐng)域事件生成 / 132
8.3.1 應(yīng)用層創(chuàng)建領(lǐng)域事件 / 133
8.3.2 聚合根創(chuàng)建領(lǐng)域事件 / 134
8.3.3 領(lǐng)域事件生成總結(jié) / 137
8.4 領(lǐng)域事件發(fā)布 / 137
8.4.1 事件存儲(chǔ) / 137
8.4.2 可靠地發(fā)布領(lǐng)域事件 / 139
8.5 領(lǐng)域事件訂閱 / 142
8.5.1 應(yīng)用層 / 142
8.5.2 領(lǐng)域事件訂閱者案例代碼 / 143
第9 章 CQRS / 144
9.1 引入CQRS 的契機(jī) / 144
9.2 CQRS 概念理解 / 145
9.3 CQRS 中的對(duì)象命名 / 146
9.4 實(shí)現(xiàn)CQRS / 147
9.4.1 方法級(jí)的CQRS / 147
9.4.2 相同數(shù)據(jù)源的CQRS / 148
9.4.3 異構(gòu)數(shù)據(jù)源的CQRS / 151
9.5 CQRS 的優(yōu)缺點(diǎn) / 153
9.5.1 CQRS 的優(yōu)點(diǎn) / 153
9.5.2 CQRS 的缺點(diǎn) / 154
第10 章 事件溯源 / 155
10.1 事件溯源概念理解 / 155
10.2 第一種事件溯源實(shí)現(xiàn)方案 / 157
10.2.1 整體方案介紹 / 157
10.2.2 組件調(diào)整總結(jié) / 164
10.2.3 案例運(yùn)行展示 / 167
10.3 第二種事件溯源實(shí)現(xiàn)方案 / 170
10.3.1 整體方案介紹 / 170
10.3.2 組件調(diào)整總結(jié) / 172
10.3.3 案例運(yùn)行展示 / 175
10.4 第三種事件溯源實(shí)現(xiàn)方案 / 177
10.4.1 拉鏈表介紹 / 177
10.4.2 整體方案介紹 / 178
10.4.3 組件調(diào)整總結(jié) / 182
10.4.4 案例運(yùn)行展示 / 182
第11 章 一致性 / 185
11.1 聚合內(nèi)事務(wù)實(shí)現(xiàn) / 185
11.1.1 聚合內(nèi)事務(wù)的實(shí)現(xiàn)誤區(qū) / 185
11.1.2 聚合內(nèi)事務(wù)的實(shí)現(xiàn)思路 / 186
11.1.3 樂觀鎖 / 187
11.1.4 數(shù)據(jù)庫(kù)讀寫的性能思考 / 192
11.2 跨聚合事務(wù)實(shí)現(xiàn) / 193
11.2.1 跨聚合事務(wù)的實(shí)現(xiàn)思路 / 193
11.2.2 二階段提交 / 193
11.2.3 本地消息表 / 197
11.2.4 最大努力通知 / 197
11.2.5 TCC 事務(wù)方案 / 198
11.2.6 Saga 事務(wù)方案 / 207
11.2.7 跨聚合事務(wù)的方案總結(jié) / 219
第12 章 戰(zhàn)略設(shè)計(jì) / 220
12.1 戰(zhàn)略設(shè)計(jì)概述 / 220
12.1.1 戰(zhàn)略設(shè)計(jì)的概念 / 220
12.1.2 戰(zhàn)略設(shè)計(jì)的誤區(qū) / 221
12.2 通用語(yǔ)言 / 221
12.2.1 通用語(yǔ)言的概念 / 221
12.2.2 通用語(yǔ)言的構(gòu)建 / 222
12.2.3 通用語(yǔ)言的維護(hù) / 222
12.3 限界上下文 / 223
12.3.1 限界上下文的定義 / 223
12.3.2 上下文劃分依據(jù) / 223
12.3.3 劃分限界上下文的實(shí)踐經(jīng)驗(yàn) / 224
12.4 上下文映射 / 224
12.4.1 上下文映射的概念 / 224
12.4.2 上下文映射的類型 / 225
12.5 子域 / 227
12.5.1 子域的定義 / 227
12.5.2 子域的類型 / 227
12.5.3 子域劃分 / 229
12.5.4 子域的演化 / 231
12.5.5 子域思想的應(yīng)用 / 233
第13 章 領(lǐng)域建模 / 237
13.1 領(lǐng)域建模的基本理解 / 237
13.2 事件風(fēng)暴法介紹 / 237
13.2.1 建模前準(zhǔn)備 / 237
13.2.2 核心概念 / 238
13.2.3 建模過(guò)程 / 240
13.3 事件風(fēng)暴法建模案例實(shí)戰(zhàn) / 244
13.3.1 案例描述 / 244
13.3.2 案例建模過(guò)程 / 245
第14 章 研發(fā)效能 / 252
14.1 腳手架 / 252
14.1.1 Maven Archetype 介紹 / 252
14.1.2 ddd-archetype 的使用 / 253
14.2 編碼效率提升 / 260
14.2.1 DDD 編碼效率遇到的困境 / 260
14.2.2 Graceful Repsonse / 260
14.2.3 代碼生成器 / 266
14.2.4 對(duì)象轉(zhuǎn)換工具 / 267
14.3 代碼靜態(tài)分析工具 / 268
14.3.1 SpotBugs / 269
14.3.2 PMD / 271
14.3.3 CheckStyle / 272
14.3.4 SonarLint / 272
14.4 低代碼 / 274
14.4.1 低代碼介紹 / 274
14.4.2 低代碼平臺(tái)核心流程 / 274
14.4.3 低代碼核心技術(shù) / 275
14.4.4 低代碼反思 / 278
14.5 持續(xù)集成/ 持續(xù)交付 / 281
14.5.1 概念理解 / 281
14.5.2 實(shí)現(xiàn)方案 / 282
14.5.3 持續(xù)集成與領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 282
第15 章 測(cè)試驅(qū)動(dòng)開發(fā) / 283
15.1 TDD 基本理解 / 283
15.2 TDD 常見的誤區(qū) / 284
15.3 TDD 技術(shù)選型 / 286
15.4 TDD 案例實(shí)戰(zhàn) / 287
15.4.1 奇怪的計(jì)算器 / 287
15.4.2 貧血模型三層架構(gòu)的TDD 實(shí)戰(zhàn) / 297
15.4.3 DDD 下的TDD 實(shí)戰(zhàn) / 304
第16 章 敏捷開發(fā) / 309
16.1 敏捷開發(fā)介紹 / 309
16.1.1 敏捷開發(fā)價(jià)值觀 / 309
16.1.2 敏捷開發(fā)十二個(gè)原則 / 310
16.2 敏捷開發(fā)常用實(shí)踐方法 / 312
16.2.1 Scrum / 312
16.2.2 看板 / 314
16.2.3 極限編程 / 315
16.3 DDD+ 敏捷開發(fā) / 318
16.3.1 以通用語(yǔ)言作為互動(dòng)的基礎(chǔ) / 318
16.3.2 從最小可行產(chǎn)品開始迭代 / 319
16.3.3 簡(jiǎn)化文檔 / 319
16.3.4 使用子域的思想指導(dǎo)確定需求
優(yōu)先級(jí) / 319
16.3.5 持續(xù)反饋和改進(jìn) / 319
第17 章 架構(gòu)可視化 / 320
17.1 架構(gòu)可視化與C4 模型 / 320
17.1.1 系統(tǒng)上下文圖 / 322
17.1.2 容器圖 / 323
17.1.3 組件圖 / 324
17.1.4 代碼圖 / 325
17.1.5 系統(tǒng)全景圖 / 325
17.1.6 動(dòng)態(tài)圖 / 326
17.1.7 部署圖 / 327
17.2 C4 模型規(guī)范和review
checklist / 329
17.2.1 C4 模型規(guī)范 / 329
17.2.2 review checklist / 329
17.3 使用文本繪制C4 架構(gòu)圖 / 329
17.3.1 文本繪圖工具選型 / 329
17.3.2 VS Code 下C4-PlantUML 的
安裝 / 330
17.3.3 IntelliJ Idea 下C4-PlantUML 的
安裝 / 332
17.3.4 案例實(shí)戰(zhàn)及C4-PlantUML 語(yǔ)法
介紹 / 332
17.4 使用繪圖工具繪制C4 架構(gòu)圖 / 338
17.4.1 繪圖工具的選擇 / 338
17.4.2 架構(gòu)圖繪制實(shí)戰(zhàn) / 338
17.4.3 架構(gòu)圖繪制心得 / 342
第18 章 使用DDD 進(jìn)行系統(tǒng)重構(gòu) / 343
18.1 系統(tǒng)重構(gòu)的基本了解 / 343
18.2 系統(tǒng)重構(gòu)的模式 / 343
18.2.1 修繕者模式 / 344
18.2.2 絞殺者模式 / 345
18.2.3 推翻重建模式 / 345
18.3 系統(tǒng)重構(gòu)的基本流程 / 346
18.3.1 啟動(dòng) / 346
18.3.2 規(guī)劃 / 349
18.3.3 執(zhí)行 / 351
18.3.4 監(jiān)控 / 356
18.3.5 收尾 / 357
第19 章 布道領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 358
19.1 為團(tuán)隊(duì)引入領(lǐng)域驅(qū)動(dòng)設(shè)計(jì) / 358
19.2 編碼指南 / 360
19.2.1 核心概念 / 360
19.2.2 應(yīng)用架構(gòu) / 361
19.2.3 事務(wù)控制 / 364
19.2.4 研發(fā)效率 / 364
19.2.5 代碼質(zhì)量 / 364
19.2.6 過(guò)程文檔 / 364
19.3 能力成熟度模型 / 365
19.3.1 軟件能力成熟度模型 / 365
19.3.2 領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)能力成熟度模型 / 365
第20 章 使用DDD 開發(fā)視頻直播服務(wù) / 367
20.1 視頻直播技術(shù)介紹 / 367
20.2 視頻直播服務(wù)案例介紹 / 368
20.2.1 案例背景 / 368
20.2.2 核心業(yè)務(wù)邏輯 / 369
20.2.3 技術(shù)選型 / 369
20.3 使用DDD 實(shí)現(xiàn)視頻直播服務(wù) / 370
20.3.1 領(lǐng)域建模 / 370
20.3.2 系統(tǒng)架構(gòu) / 371
20.3.3 代碼工程初始化 / 372
20.3.4 CQRS / 372
20.3.5 ACL / 374
20.3.6 Graceful Response / 374
20.3.7 接口自動(dòng)化測(cè)試 / 376
20.4 案例運(yùn)行截圖 / 377
20.4.1 直播間管理 / 377
20.4.2 主播管理 / 377
20.4.3 直播管理 / 378
第21 章 使用DDD 開發(fā)AIGC產(chǎn)品 / 382
21.1 AIGC 與DDD / 382
21.2 AIGC 案例介紹 / 382
21.2.1 案例背景 / 383
21.2.2 核心業(yè)務(wù)邏輯 / 383
21.2.3 系統(tǒng)架構(gòu) / 385
21.2.4 技術(shù)選型 / 385
21.3 DDD 開發(fā)AIGC 產(chǎn)品 / 385
21.3.1 領(lǐng)域建模 / 386
21.3.2 代碼工程初始化 / 387
21.3.3 CQRS / 387
21.3.4 領(lǐng)域服務(wù) / 388
21.3.5 ACL / 390
21.3.6 Graceful Response / 391
21.3.7 接口自動(dòng)化測(cè)試 / 391
21.4 案例運(yùn)行截圖 / 393
21.4.1 創(chuàng)建日記接口 / 393
21.4.2 創(chuàng)建貼紙接口 / 394
21.4.3 根據(jù)貼紙生成日記正文接口 / 395