復(fù)雜軟件設(shè)計(jì)之道:領(lǐng)域驅(qū)動設(shè)計(jì)全面解析與實(shí)戰(zhàn)
定 價(jià):119 元
- 作者:彭晨陽 編著
- 出版時(shí)間:2020/8/1
- ISBN:9787111661122
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP311.1
- 頁碼:352
- 紙張:
- 版次:
- 開本:16開
領(lǐng)域驅(qū)動設(shè)計(jì)簡稱DDD,《復(fù)雜軟件設(shè)計(jì)之道:領(lǐng)域驅(qū)動設(shè)計(jì)全面解析與實(shí)戰(zhàn)》前6章全面解析了DDD的分析方法和技術(shù)架構(gòu),包括領(lǐng)域驅(qū)動設(shè)計(jì)基礎(chǔ)、領(lǐng)域驅(qū)動戰(zhàn)略設(shè)計(jì)(有界上下文和統(tǒng)一語言)、聚合設(shè)計(jì)、實(shí)體和值對象、CQRS架構(gòu)和事件溯源,第7章使用經(jīng)典的貨物運(yùn)輸系統(tǒng)案例進(jìn)行了完整、詳細(xì)的綜合演示。
《復(fù)雜軟件設(shè)計(jì)之道:領(lǐng)域驅(qū)動設(shè)計(jì)全面解析與實(shí)戰(zhàn)》同時(shí)引入了DDD的*新發(fā)展成果,如事件風(fēng)暴建模,并以此建模方式替代傳統(tǒng)的DDD建模方式講解了多個(gè)案例。還涉及大量軟件系統(tǒng)實(shí)現(xiàn)相關(guān)的技術(shù)和架構(gòu),讀者在學(xué)習(xí)DDD的同時(shí),也可以掌握這些技術(shù)、架構(gòu)在DDD實(shí)現(xiàn)中的靈活應(yīng)用。
另外,每個(gè)概念或方法的講解過程都穿插了具體實(shí)例,以方便讀者結(jié)合實(shí)例進(jìn)行學(xué)習(xí);第2~7章每章*后都有總結(jié)與拓展,將本章涉及的案例和知識進(jìn)行總結(jié),并引入國際DDD專家的心得經(jīng)驗(yàn),試圖告訴讀者一條DDD實(shí)戰(zhàn)中行之有效的途徑。
《復(fù)雜軟件設(shè)計(jì)之道:領(lǐng)域驅(qū)動設(shè)計(jì)全面解析與實(shí)戰(zhàn)》主要面向擁有一定實(shí)踐經(jīng)驗(yàn)的軟件產(chǎn)品經(jīng)理、領(lǐng)域?qū)<、軟件設(shè)計(jì)開發(fā)相關(guān)從業(yè)人員,相關(guān)初級從業(yè)者也可閱讀本書。
前言
第1章 領(lǐng)域驅(qū)動設(shè)計(jì)基礎(chǔ)1
1.1 領(lǐng)域驅(qū)動設(shè)計(jì)的起源與發(fā)展1
1.1.1 程序員為難之處1
1.1.2 技術(shù)負(fù)債與軟件質(zhì)量3
1.1.3 ER數(shù)據(jù)建模與面向?qū)ο蠼?
1.1.4 DDD的誕生和發(fā)展6
1.2 領(lǐng)域驅(qū)動設(shè)計(jì)的特點(diǎn)9
1.2.1 發(fā)現(xiàn)和理解問題10
1.2.2 領(lǐng)域即邊界13
1.2.3 解決復(fù)雜性15
1.2.4 新的數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)方式17
1.2.5 需要注重產(chǎn)品的程序員18
1.3 領(lǐng)域驅(qū)動設(shè)計(jì)的難點(diǎn)20
1.3.1 業(yè)務(wù)策略和業(yè)務(wù)規(guī)則21
1.3.2 統(tǒng)一語言與有界上下文25
1.3.3 領(lǐng)域模型的提煉26
1.4 領(lǐng)域驅(qū)動設(shè)計(jì)的應(yīng)用場景29
1.4.1 哪些應(yīng)用不適合?30
1.4.2 適合微服務(wù)架構(gòu)30
第2章 領(lǐng)域驅(qū)動戰(zhàn)略設(shè)計(jì)31
2.1 有界上下文31
2.1.1 統(tǒng)一語言:統(tǒng)一項(xiàng)目中的交流
語言32
2.1.2 如何發(fā)現(xiàn)有界上下文和統(tǒng)一
語言?34
2.1.3 有界上下文之間的關(guān)系36
2.1.4 核心子域、支持子域與通用
子域37
2.1.5 實(shí)例解析:電費(fèi)結(jié)算系統(tǒng)38
2.2 按時(shí)間線發(fā)現(xiàn)有界上下文40
2.2.1 UML時(shí)序圖40
2.2.2 實(shí)例解析:電商領(lǐng)域之商品管理
上下文41
2.3 通過領(lǐng)域故事或流程發(fā)現(xiàn)有界
上下文45
2.4 通過事件風(fēng)暴會議發(fā)現(xiàn)有界
上下文48
2.4.1 領(lǐng)域事件50
2.4.2 命令51
2.4.3 事件風(fēng)暴建模法53
2.4.4 實(shí)例解析:一個(gè)典型的事件風(fēng)暴
建模議程56
2.5 業(yè)務(wù)平臺與中臺設(shè)計(jì)60
2.6 總結(jié)與拓展62
第3章 聚合設(shè)計(jì)68
3.1 聚合設(shè)計(jì)的概念68
3.1.1 高聚合低關(guān)聯(lián)71
3.1.2 聚合的邏輯一致性74
3.2 設(shè)計(jì)聚合的幾種方法77
3.2.1 改變主謂賓順序78
3.2.2 根據(jù)領(lǐng)域事件設(shè)計(jì)聚合79
3.2.3 根據(jù)單一職責(zé)設(shè)計(jì)聚合81
3.2.4 按時(shí)間邊界設(shè)計(jì)聚合83
3.2.5 通過事務(wù)邊界設(shè)計(jì)聚合87
3.2.6 通過ER模型設(shè)計(jì)聚合89
3.3 實(shí)例解析:訂單系統(tǒng)中的聚合
設(shè)計(jì)95
3.3.1 信息擁有者模式97
3.3.2 引用模式99
3.3.3 奧卡姆剃刀原理100
3.3.4 控制者模式101
3.3.5 訂單狀態(tài)集中控制實(shí)現(xiàn)103
3.3.6 做什么和怎么做的分離106
3.3.7 在服務(wù)中驗(yàn)證聚合107
3.3.8 Spring Boot實(shí)現(xiàn)110
3.4 總結(jié)與拓展115
第4章 實(shí)體和值對象121
4.1 失血/貧血模型121
4.2 實(shí)體124
4.2.1 實(shí)體的標(biāo)識125
4.2.2 實(shí)體的設(shè)計(jì)126
4.2.3 實(shí)體對象的創(chuàng)建128
4.3 值對象131
4.3.1 值對象與實(shí)體的區(qū)別134
4.3.2 用值對象重構(gòu)138
4.4 領(lǐng)域服務(wù)140
4.4.1 領(lǐng)域服務(wù)的特征141
4.4.2 領(lǐng)域服務(wù)與應(yīng)用服務(wù)144
4.5 倉儲147
4.5.1 自行實(shí)現(xiàn)倉儲148
4.5.2 結(jié)合Builder模式實(shí)現(xiàn)倉儲151
4.6 充血模型的設(shè)計(jì)原則154
4.6.1 將公有setter方法變?yōu)樗接?55
4.6.2 注重對象的構(gòu)建157
4.7 實(shí)例解析:論壇系統(tǒng)實(shí)體和
值對象設(shè)計(jì)159
4.7.1 聚合根實(shí)體是什么?161
4.7.2 值對象的設(shè)計(jì)164
4.7.3 狀態(tài)設(shè)計(jì)167
4.7.4 發(fā)帖功能實(shí)現(xiàn)170
4.7.5 雙聚合根173
4.7.6 分配職責(zé)行為176
4.7.7 構(gòu)建對象必須遵循唯一性179
4.8 總結(jié)與拓展184
第5章 CQRS架構(gòu)186
5.1 DDD架構(gòu)介紹187
5.1.1 MVC模式187
5.1.2 傳統(tǒng)三層架構(gòu)188
5.1.3 傳統(tǒng)DDD分層架構(gòu)191
5.1.4 清潔架構(gòu)194
5.1.5 六邊形架構(gòu)198
5.1.6 垂直切片架構(gòu)201
5.2 CQRS架構(gòu)的特點(diǎn)203
5.3 命令和查詢分離205
5.3.1 查詢模型實(shí)現(xiàn)206
5.3.2 命令模型實(shí)現(xiàn)210
5.3.3 Command對象212
5.3.4 命令和查詢的協(xié)作216
5.4 不同的數(shù)據(jù)訪問方式219
5.4.1 查詢端存儲實(shí)現(xiàn)220
5.4.2 規(guī)格模式221
5.4.3 命令與查詢的同步224
5.5 CAP定理226
5.6 領(lǐng)域事件實(shí)現(xiàn)數(shù)據(jù)同步227
5.7 實(shí)例解析:使用Axon框架
實(shí)現(xiàn)CQRS231
5.7.1 命令端實(shí)現(xiàn)233
5.7.2 查詢端實(shí)現(xiàn)236
5.8 總結(jié)與拓展237
第6章 事件溯源241
6.1 什么是事件溯源?242
6.2 基于事件溯源的聚合根設(shè)計(jì)249
6.2.1 用事件替代狀態(tài)249
6.2.2 活動與事件253
6.3 事件溯源的優(yōu)點(diǎn)260
6.3.1 替代分布式事務(wù)261
6.3.2 事件日志的順序性263
6.3.3 基于事件日志的消息系統(tǒng)265
6.4 微服務(wù)中的分布式事務(wù)
實(shí)現(xiàn)266
6.4.1 引入Saga模式267
6.4.2 Saga分布式事務(wù)原理267
6.4.3 實(shí)例解析:賬戶轉(zhuǎn)賬271
6.5 使用Apache Kafka實(shí)現(xiàn)事件
溯源275
6.6 投射模式280
6.7 更改數(shù)據(jù)捕獲(CDC)282
6.8 總結(jié)與拓展285
第7章 貨物運(yùn)輸系統(tǒng)290
7.1 領(lǐng)域描述290
7.2 從流程中發(fā)現(xiàn)領(lǐng)域事件294
7.2.1 受理流程295
7.2.2 作業(yè)流程298
7.3 概念挖掘301
7.3.1 劃分有界上下文302
7.3.2 預(yù)訂受理上下文304
7.3.3 運(yùn)輸作業(yè)上下文306
7.4 預(yù)訂受理的聚合設(shè)計(jì)309
7.4.1 聚合的發(fā)現(xiàn)和命名309
7.4.2 聚合設(shè)計(jì)313
7.4.3 狀態(tài)設(shè)計(jì)316
7.4.4 命令與事件設(shè)計(jì)317
7.4.5 代碼實(shí)現(xiàn)320
7.4.6 設(shè)計(jì)和實(shí)現(xiàn)的差異325
7.5 運(yùn)輸作業(yè)的聚合設(shè)計(jì)327
7.5.1 命令、事件和聚合328
7.5.2 有界上下文映射331
7.5.3 聚合重構(gòu)設(shè)計(jì)334
7.6 總結(jié)與拓展336