注冊 | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件與程序設(shè)計(jì)深入實(shí)踐 DDD:以 DSL 驅(qū)動(dòng)復(fù)雜軟件開發(fā)

深入實(shí)踐 DDD:以 DSL 驅(qū)動(dòng)復(fù)雜軟件開發(fā)

深入實(shí)踐 DDD:以 DSL 驅(qū)動(dòng)復(fù)雜軟件開發(fā)

定 價(jià):¥99.00

作 者: 楊捷鋒 著
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787111677710 出版時(shí)間: 2021-04-01 包裝: 平裝
開本: 16開 頁數(shù): 396 字?jǐn)?shù):  

內(nèi)容簡介

  本書是擁有二十年商業(yè)軟件開發(fā)經(jīng)驗(yàn)及十年技術(shù)管理經(jīng)驗(yàn)的資深技術(shù)專家嘔心瀝血之作,也是目前市場上少有的闡述如何通過使用領(lǐng)域?qū)S谜Z言(DSL)實(shí)現(xiàn)領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的圖書。 書中首先帶領(lǐng)讀者重溫DDD在戰(zhàn)術(shù)設(shè)計(jì)層面及戰(zhàn)略設(shè)計(jì)層面上的部分重要概念,并簡要介紹了自DDD社區(qū)興起的一些軟件架構(gòu)模式。然后闡述如何設(shè)計(jì)一門DDD原生的DSL,包括這個(gè)DSL的規(guī)范支持哪些特性、如何幫助團(tuán)隊(duì)描述領(lǐng)域模型的方方面面、這些特性的選擇基于何種考量等。然后在此基礎(chǔ)上詳細(xì)講解了如何使用技術(shù)工具將描述領(lǐng)域模型的DSL文檔直接轉(zhuǎn)化為可以工作的軟件代碼,在這個(gè)過程中結(jié)合諸多來自商業(yè)軟件開發(fā)工作中的真實(shí)案例,展示并分析了大量的關(guān)鍵代碼,讓讀者可以深入地了解制造那些基于DSL的DDD技術(shù)工具的秘密。之后講述了一些建模案例,并探討了一些與DDD相關(guān)的其他話題,對(duì)讀者開拓技術(shù)思維、更深刻地理解DDD有所助益。

作者簡介

  楊捷鋒,曾就職于南開戈德集團(tuán)、普天集團(tuán)、通路快建等公司。曾作為獨(dú)立技術(shù)顧問為海爾集團(tuán)、沈陽飛機(jī)工業(yè)集團(tuán)、上廣電NEC、天馬微電子等企業(yè)提供軟件開發(fā)與技術(shù)咨詢服務(wù)。目前在一家電商創(chuàng)業(yè)公司擔(dān)任技術(shù)負(fù)責(zé)人。有多個(gè)大型企業(yè)應(yīng)用軟件的分析建模經(jīng)驗(yàn),以及大型開發(fā)框架(ORM、IoC等)的架構(gòu)經(jīng)驗(yàn)。多年來一直未脫離軟件開發(fā)一線工作,近年來自認(rèn)為對(duì)軟件系統(tǒng)分析、數(shù)據(jù)建模、領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)、項(xiàng)目管理略有心得。

圖書目錄

前 言
部分 概念
第1章 DDD 的關(guān)鍵概念 2
1.1 自頂而下、逐步求精 3
1.1.1 DDD開創(chuàng)全新分析流派 3
1.1.2 什么是軟件的核心復(fù)雜性 4
1.2 什么是領(lǐng)域模型 4
1.3 戰(zhàn)術(shù)層面的關(guān)鍵概念 6
1.3.1 實(shí)體 6
1.3.2 值對(duì)象 6
1.3.3 聚合與聚合根、聚合內(nèi)部實(shí)體 7
1.3.4 聚合的整體與局部 9
1.3.5 聚合是數(shù)據(jù)修改的單元 9
1.3.6 聚合分析是“拆分”的基礎(chǔ) 10
1.3.7 服務(wù) 12
1.4 戰(zhàn)略層面的關(guān)鍵概念 13
1.4.1 限界上下文 13
1.4.2 限界上下文與微服務(wù) 14
1.4.3 防腐層 15
1.4.4 統(tǒng)一語言 18
1.5 ER 模型、OO模型和關(guān)系模型 19
1.6 概念建模與模型范式 21
第2章 其他DDD相關(guān)概念 22
2.1 領(lǐng)域 ID 22
2.1.1 自然鍵與代理鍵 23
2.1.2 DDD 實(shí)體的 ID 需要被終用戶看到 23
2.1.3 什么時(shí)候使用代理鍵 24
2.2 ID、Local ID 與 Global ID 26
2.3 命令、事件與狀態(tài) 27
第3章 CQRS 與 Event Sourcing 29
3.1 命令查詢職責(zé)分離 29
3.2 事件溯源 32
3.3 From-Thru 模式 33
3.3.1 示例:ProductPrice 33
3.3.2 示例:PartyRelationship 35
3.4 CQRS、ES 與流處理 36
第二部分 設(shè)計(jì)
第4章 DDD 的 DSL是什么 40
4.1 為什么 DDD 需要 DSL 41
4.1.1 為什么實(shí)現(xiàn) DDD 那么難 41
4.1.2 搞定 DDD 的“錘子”在哪里 42
4.2 需要什么樣的 DSL 43
4.2.1 在“信仰”上保持中立 44
4.2.2 DDD 原生 45
4.2.3 在復(fù)雜和簡單中平衡 46
4.2.4 通過 DSL 重塑軟件開發(fā)過程 48
4.3 DDDML——DDD 的 DSL 48
4.3.1 DDDML 的詞匯表 49
4.3.2 DDDML 的 Schema 51
4.4 DDDML 示例:Car 52
4.4.1 “對(duì)象”的名稱在哪里 55
4.4.2 使用兩種命名風(fēng)格:camelCase 與 PascalCase 55
4.4.3 為何引入關(guān)鍵字 itemType 56
第5章 限界上下文 57
5.1 DDDML 文檔的根結(jié)點(diǎn)下有什么 57
5.2 限界上下文的配置 59
5.3 名稱空間 62
5.3.1 再談 PascalCase 命名風(fēng)格 62
5.3.2 注意兩個(gè)字母的首字母縮寫詞 63
5.4 關(guān)于模塊 64
第6章 值對(duì)象 67
6.1 領(lǐng)域基礎(chǔ)類型 68
6.1.1 例子:從 OFBiz 借鑒過來的類型系統(tǒng) 70
6.1.2 例子:任務(wù)的觸發(fā)器 73
6.2 數(shù)據(jù)值對(duì)象 75
6.3 枚舉對(duì)象 76
第7章 聚合與實(shí)體 79
7.1 用同一個(gè)結(jié)點(diǎn)描述聚合及聚合根 79
7.2 實(shí)體之間只有一種基本關(guān)系 82
7.3 關(guān)于實(shí)體的 ID 85
7.4 不變的實(shí)體 89
7.5 動(dòng)態(tài)對(duì)象 90
7.6  繼承與多態(tài) 92
7.6.1 使用關(guān)鍵字 inheritedFrom 94
7.6.2 超對(duì)象 95
7.7 引用 97
7.7.1 定義實(shí)體的引用 97
7.7.2 屬性的類型與引用類型 101
7.8 基本屬性與派生屬性 102
7.8.1 類型為實(shí)體集合的派生屬性 103
7.8.2 類型為值對(duì)象的派生屬性 106
7.9 約束 107
7.9.1 在實(shí)體層面的約束 107
7.9.2 在屬性層面的約束 109
7.10 提供擴(kuò)展點(diǎn) 110
第8章 超越數(shù)據(jù)模型 112
8.1 實(shí)體的方法 112
8.1.1 聚合根的方法 115
8.1.2 非聚合根實(shí)體的方法 116
8.1.3 屬性的命令 117
8.1.4 命令 ID 與請求者 ID 119
8.2 記錄業(yè)務(wù)邏輯 119
8.2.1 關(guān)于 accountingQuantityTypes 120
8.2.2 關(guān)于 derivationLogic 120
8.2.3 關(guān)于 filter 121
8.2.4 使用關(guān)鍵字referenceFilter 121
8.2.5 業(yè)務(wù)邏輯代碼中的變量 122
8.2.6 說說區(qū)塊鏈 123
8.3 領(lǐng)域服務(wù) 123
8.4 在方法定義中使用關(guān)鍵字 inheritedFrom 125
8.5 方法的安全性 126
第9章 模式 128
9.1 賬務(wù)模式 128
9.2 狀態(tài)機(jī)模式 132
9.3 樹結(jié)構(gòu)模式 137
9.3.1 簡單的樹 137
9.3.2 使用關(guān)鍵字structureType 138
9.3.3 使用關(guān)鍵字structureTypeFilter 139
第三部分 實(shí)踐
第10章 處理限界上下文與值對(duì)象 142
10.1 項(xiàng)目文件 143
10.2 處理值對(duì)象 144
10.2.1 一個(gè)需要處理的數(shù)據(jù)值對(duì)象示例 145
10.2.2 使用 Hibernate 存儲(chǔ)數(shù)據(jù)值對(duì)象 146
10.2.3 處理值對(duì)象的集合 149
10.2.4 在 URL 中使用數(shù)據(jù)值對(duì)象 151
10.2.5 處理領(lǐng)域基礎(chǔ)類型 153
第11章 處理聚合與實(shí)體 161
11.1 生成聚合的代碼 162
11.1.1 接口 163
11.1.2 代碼中的命名問題 178
11.1.3 接口的實(shí)現(xiàn) 179
11.1.4 事件存儲(chǔ)與持久化 207
11.1.5 使用 Validation 框架 218
11.1.6 保證靜態(tài)方法與模型同步更新 220
11.1.7 不使用事件溯源 222
11.2 Override 聚合對(duì)象的方法 223
11.3 處理繼承 225
11.3.1 TPCH 226
11.3.2 TPCC 227
11.3.3 TPS 228
11.4 處理模式 229
11.4.1 處理賬務(wù)模式 229
11.4.2 處理狀態(tài)機(jī)模式 234
第12章 處理領(lǐng)域服務(wù) 238
12.1 處理數(shù)據(jù)的一致性 239
12.1.1 使用數(shù)據(jù)庫事務(wù)實(shí)現(xiàn)一致性 240
12.1.2 使用 Saga 實(shí)現(xiàn)終一致性 241
12.2 發(fā)布與處理領(lǐng)域事件 243
12.2.1 編寫 DDDML 文檔 243
12.2.2 生成的事件發(fā)布代碼 245
12.2.3 編寫生產(chǎn)端聚合的業(yè)務(wù)邏輯 253
12.2.4 實(shí)現(xiàn)消費(fèi)端領(lǐng)域事件的處理 254
12.3 支持基于編制的 Saga 255
12.3.1 編寫 DDDML 文檔 255
12.3.2 生成的 Saga 命令處理代碼 261
12.3.3 需要我們編寫的 Saga 代碼 268
12.3.4 需要我們實(shí)現(xiàn)的實(shí)體方法 273
第13章 RESTful API 276
13.1 RESTful API 的實(shí)踐 276
13.1.1 沒有必要絞盡腦汁地尋找名詞 277
13.1.2 盡可能使用 HTTP作為封包 277
13.1.3 異常處理 279
13.2 聚合的 RESTful API 280
13.2.1 GET 280
13.2.2 PUT 291
13.2.3 PATCH 293
13.2.4 DELETE 295
13.2.5 POST 295
13.2.6 事件溯源 API 296
13.2.7 樹的查詢接口 297
13.3 服務(wù)的 RESTful API 297
13.4 身份與訪問管理 299
13.4.1 獲取 OAuth 2.0 Bearer Token 299
13.4.2 在資源服務(wù)器上處理授權(quán) 301
13.5 生成 Client SDK 302
13.5.1 創(chuàng)建聚合實(shí)例 303
13.5.2 更新聚合實(shí)例 304
13.5.3 使用 Retrofit2 306
第14章 直達(dá) UI 308
14.1 兩條路線的斗爭 309
14.1.1 前端“知道”領(lǐng)域模型 309
14.1.2 前端“只知道”RESTful API 312
14.2 生成 Admin UI 312
14.2.1 使用 referenceFilter 313
14.2.2 展示派生的實(shí)體集合屬性 315
14.2.3 使用屬性層面的約束 316
14.2.4 使用 UI 層元數(shù)據(jù) 317
14.2.5 構(gòu)建更實(shí)時(shí)的應(yīng)用 318
第四部分 建模漫談與 DDD 隨想
第15章 找回敏捷的軟件設(shè)計(jì) 322
15.1 重構(gòu)不是靈藥 323
15.2 數(shù)據(jù)建模示例:訂單的裝運(yùn)與支付 324
15.2.1 訂單與訂單行項(xiàng) 325
15.2.2 訂單與訂單裝運(yùn)組 327
15.2.3 訂單與裝運(yùn)單 328
15.2.4 訂單的項(xiàng)目發(fā)貨 329
15.2.5 訂單的支付 330
15.3 中臺(tái)是一個(gè)輪回 332
15.4 實(shí)例化需求與行為驅(qū)動(dòng)測試 334
15.4.1  什么是實(shí)例化需求 334
15.4.2 BDD 工具 335
15.4.3 BDD 工具應(yīng)與 DDD 相得益彰 336
15.4.4 不要在驗(yàn)收測試中使用固件數(shù)據(jù) 336
15.4.5 制造“制造數(shù)據(jù)”的工具 337
15.5 要領(lǐng)域模型驅(qū)動(dòng),不要 UI 驅(qū)動(dòng) 345
15.6 不要用“我”的視角設(shè)計(jì)核心模型 346
15.6.1 讓 User 消失 347
15.6.2 認(rèn)識(shí)一下 Party 348
15.7 我們想要的敏捷設(shè)計(jì) 350
第16章 說說 SaaS 351
16.1 何為 SaaS 351
16.2 多租戶技術(shù) 352
16.3 構(gòu)建成功的 SaaS 有何難 353
16.3.1 多租戶系統(tǒng)的構(gòu)建成本 353
16.3.2 難以滿足的定制化需求 353
16.3.3 負(fù)重前行的傳統(tǒng)軟件公司 355
16.4 SaaS 需要 DDD 355
第17章 更好的“錘子” 356
17.1 我們制作的一個(gè) DDDML GUI 工具 357
17.1.1 給領(lǐng)域建模提供起點(diǎn) 357
17.1.2 創(chuàng)建新的限界上下文 358
17.1.3 從 OFBiz 中“借鑒”數(shù)據(jù)模型 359
17.1.4 構(gòu)建項(xiàng)目并運(yùn)行應(yīng)用 361
17.1.5 使用 HTTP PUT 方法創(chuàng)建實(shí)體 362
17.1.6 給聚合增加方法 363
17.1.7 生成限界上下文的Demo Admin UI 368
17.1.8 讓不同層級(jí)的開發(fā)人員各盡其能 369
17.2 以統(tǒng)一語言建模 370
附錄 DDDML 示例與縮寫表 373

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)