悟道領域驅動設計

覃玉傑

  • 出版商: 電子工業
  • 出版日期: 2024-10-01
  • 定價: $708
  • 售價: 8.5$602
  • 語言: 簡體中文
  • 頁數: 412
  • ISBN: 7121489791
  • ISBN-13: 9787121489792
  • 相關分類: Domain-Driven Design
  • 下單後立即進貨 (約4週~6週)

買這商品的人也買了...

相關主題

商品描述

本書系統介紹領域驅動設計的理論知識與實踐方法,不僅講解領域驅動設計的戰術設計(如實體、值對象、聚合、聚合根、領域服務、領域事件等)、戰略設計(如限界上下文、上下文映射、子域等)、領域建模等理論知識,還探討領域驅動設計的應用架構、類型變化鏈、一致性、CQRS、事件溯源、編碼指南、架構可視化(基於C4模型)等工程實踐,探索如何將領域驅動設計與當前業界流行的開發方法(如低代碼、敏捷開發、測試驅動開發等)融合,使領域驅動設計成為真正可落地的開發方法。本書在介紹概念時,為概念提供了代碼層面的講解,這樣可以極大地降低讀者對概念的理解門檻。此外,書中還提供兩個熱門領域的項目案例——開發視頻直播服務和AIGC產品,幫助讀者理解、掌握、應用領域驅動設計。

目錄大綱

第1 章  領域驅動設計預熱 / 1
1.1  初步理解領域驅動設計 / 1
1.1.1  領域驅動設計的簡史 / 1
1.1.2  領域驅動設計的基本內容 / 1
1.1.3  領域驅動設計的意義 / 3
1.1.4  領域驅動設計的困境 / 5
1.2  如何學習領域驅動設計 / 6
1.2.1  學習難點 / 6
1.2.2  學習路線 / 6
1.3  領域驅動設計常見爭議探討 / 8
1.3.1  領域驅動設計的適用範圍 / 8
1.3.2  貧血模型與充血模型的選擇 / 10
1.3.3  領域驅動設計落地的認知差異 / 10
1.3.4  領域驅動設計的技術選型 / 11
1.3.5  領域驅動設計與面向對象編程 / 12
1.3.6  不要過度迷信領域驅動設計 / 13
第2 章  應用架構 / 14
2.1  貧血模型和充血模型 / 14
2.1.1  對象的屬性和行為 / 14
2.1.2  貧血模型 / 14
2.1.3  充血模型 / 15
2.1.4  領域驅動設計對模型的要求 / 15
2.2  經典貧血三層架構 / 16
2.2.1  解讀貧血三層架構 / 16
2.2.2  貧血三層架構的優點 / 17
2.2.3  貧血三層架構的問題 / 17
2.3  DDD 常見的應用架構 / 18
2.3.1  經典的四層架構 / 18
2.3.2  埠和適配器架構 / 19
2.4  應用架構演化 / 22
2.4.1  合並數據模型 / 22
2.4.2  抽取領域模型 / 22
2.4.3  維護領域對象生命周期 / 24
2.4.4  泛化抽象 / 26
2.4.5  完整的項目結構 / 28
2.5  領域對象的生命周期 / 29
2.5.1  領域對象的生命周期介紹 / 29
2.5.2  領域對象的創建過程 / 29
2.5.3  領域對象的保存過程 / 31
2.5.4  領域對象的重建過程 / 31
2.5.5  領域對象的歸檔過程 / 33
2.6  應用架構的類型變化鏈 / 33
2.6.1  應用架構各層的對象類型 / 33
2.6.2  查詢過程的類型變化 / 36
2.6.3  創建過程的類型轉換 / 40
2.6.4  修改過程的類型轉換 / 43
第3 章  實體和值對象 / 45
3.1  實體 / 45
3.1.1  實體的概念 / 45
3.1.2  實體的建模 / 45
3.1.3  實體的創建 / 48
3.1.4  實體的重建 / 48
3.2  值對象 / 49
3.2.1  值對象的概念 / 49
3.2.2  值對象的實現 / 49
3.2.3  值對象的建模 / 50
3.2.4  無副作用的值對象方法 / 51
3.2.5  值對象的創建 / 52
3.2.6  Domain Primitive / 53
3.3  無副作用函數 / 54
3.3.1  無副作用函數的定義 / 54
3.3.2  無副作用函數的實現 / 56
第4 章  聚合與聚合根 / 57
4.1  領域模型相關概念梳理 / 57
4.2  聚合與聚合根的定義 / 58
4.3  聚合與聚合根的作用 / 59
4.4  聚合設計的原則 / 62
4.4.1  設計小而全的聚合 / 62
4.4.2  通過唯一標識引用其他聚合根 / 62
4.4.3  一個事務只更新單個聚合 / 63
4.4.4  跨聚合採用最終一致性 / 64
4.5  聚合的拆分 / 64
4.5.1  第一次拆分 / 65
4.5.2  第二次拆分 / 65
4.6  聚合根的配套組件 / 66
第5 章  Factory、Repository 和領域服務 / 67
5.1  Factory / 67
5.1.1  Factory 的定義 / 67
5.1.2  Factory 的實現 / 67
5.1.3  Factory 的職責辨析 / 68
5.2  Repository / 68
5.2.1  Repository 的定義 / 68
5.2.2  Repository 的實現 / 68
5.2.3  Repository 實戰 / 69
5.3  領域服務 / 79
5.3.1  領域服務的基本概念 / 79
5.3.2  領域服務的特點 / 80
5.3.3  領域服務實戰 / 80
5.3.4  領域服務與應用服務的區別 / 81
第6 章  設計模式 / 82
6.1  設計模式與領域驅動設計 / 82
6.2  責任鏈模式 / 82
6.2.1  責任鏈模式的定義 / 82
6.2.2  責任鏈的案例代碼 / 83
6.2.3  責任鏈框架?模式 / 89
6.2.4  在領域驅動設計中使用責任鏈
6.3  策略模式 / 90
6.3.1  策略模式的定義 / 90
6.3.2  策略模式的案例代碼 / 91
6.3.3  在領域驅動設計中使用策略
模式 / 92
6.4  橋接模式 / 96
6.4.1  橋接模式的定義 / 96
6.4.2  橋接模式的案例代碼 / 97
6.4.3  在領域驅動設計中使用橋接
模式 / 100
6.5  規約模式 / 106
6.5.1  規約模式的定義 / 106
6.5.2  規約模式的應用場景 / 107
6.5.3  規約模式的案例代碼 / 107
6.5.4  在領域驅動設計中使用規約模式 / 111
6.5.5  規約模式的使用誤區 / 112
第7 章  防腐層 / 113
7.1  防腐層的概念理解 / 113
7.2  防腐層的實現方案 / 115
7.2.1  適配器模式的定義 / 115
7.2.2  適配器模式的實現 / 116
7.2.3  使用適配器模式實現防腐層 / 118
7.3  防腐層的實現要點總結 / 121
7.3.1  封裝技術細節 / 121
7.3.2  盡量簡單且穩定 / 121
7.3.3  入參和出參為本地上下文值對象或基本數據類型 / 122
7.3.4  將外部異常轉為本地異常 / 122
7.3.5  將外部錯誤碼轉為本地異常 / 123
7.3.6  按需返回 / 123
7.3.7  不在實體和值對象中調用防腐層 / 124
第8 章  領域事件 / 126
8.1  冪等設計 / 126
8.1.1  冪等設計的定義 / 126
8.1.2  寫操作的冪等性 / 126
8.1.3  冪等設計的實現方案 / 127
8.2  領域事件建模 / 130
8.2.1  領域事件的概念 / 130
8.2.2  領域事件的應用 / 131
8.2.3  領域事件的消息體 / 131
8.2.4  領域事件的建模實現 / 132
8.3  領域事件生成 / 132
8.3.1  應用層創建領域事件 / 133
8.3.2  聚合根創建領域事件 / 134
8.3.3  領域事件生成總結 / 137
8.4  領域事件發布 / 137
8.4.1  事件存儲 / 137
8.4.2  可靠地發布領域事件 / 139
8.5  領域事件訂閱 / 142
8.5.1  應用層 / 142
8.5.2  領域事件訂閱者案例代碼 / 143
第9 章  CQRS / 144
9.1  引入CQRS 的契機 / 144
9.2  CQRS 概念理解 / 145
9.3  CQRS 中的對象命名 / 146
9.4  實現CQRS / 147
9.4.1  方法級的CQRS / 147
9.4.2  相同數據源的CQRS / 148
9.4.3  異構數據源的CQRS / 151
9.5  CQRS 的優缺點 / 153
9.5.1  CQRS 的優點 / 153
9.5.2  CQRS 的缺點 / 154
第10 章  事件溯源 / 155
10.1  事件溯源概念理解 / 155
10.2  第一種事件溯源實現方案 / 157
10.2.1  整體方案介紹 / 157
10.2.2  組件調整總結 / 164
10.2.3  案例運行展示 / 167
10.3  第二種事件溯源實現方案 / 170
10.3.1  整體方案介紹 / 170
10.3.2  組件調整總結 / 172
10.3.3  案例運行展示 / 175
10.4  第三種事件溯源實現方案 / 177
10.4.1  拉鏈表介紹 / 177
10.4.2  整體方案介紹 / 178
10.4.3  組件調整總結 / 182
10.4.4  案例運行展示 / 182
第11 章  一致性 / 185
11.1  聚合內事務實現 / 185
11.1.1  聚合內事務的實現誤區 / 185
11.1.2  聚合內事務的實現思路 / 186
11.1.3  樂觀鎖 / 187
11.1.4  數據庫讀寫的性能思考 / 192
11.2  跨聚合事務實現 / 193
11.2.1  跨聚合事務的實現思路 / 193
11.2.2  二階段提交 / 193
11.2.3  本地消息表 / 197
11.2.4  最大努力通知 / 197
11.2.5  TCC 事務方案 / 198
11.2.6  Saga 事務方案 / 207
11.2.7  跨聚合事務的方案總結 / 219
第12 章  戰略設計 / 220
12.1  戰略設計概述 / 220
12.1.1  戰略設計的概念 / 220
12.1.2  戰略設計的誤區 / 221
12.2  通用語言 / 221
12.2.1  通用語言的概念 / 221
12.2.2  通用語言的構建 / 222
12.2.3  通用語言的維護 / 222
12.3  限界上下文 / 223
12.3.1  限界上下文的定義 / 223
12.3.2  上下文劃分依據 / 223
12.3.3  劃分限界上下文的實踐經驗 / 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  子域思想的應用 / 233
第13 章  領域建模 / 237
13.1  領域建模的基本理解 / 237
13.2  事件風暴法介紹 / 237
13.2.1  建模前準備 / 237
13.2.2  核心概念 / 238
13.2.3  建模過程 / 240
13.3  事件風暴法建模案例實戰 / 244
13.3.1  案例描述 / 244
13.3.2  案例建模過程 / 245
第14 章  研發效能 / 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  對象轉換工具 / 267
14.3  代碼靜態分析工具 / 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  低代碼平臺核心流程 / 274
14.4.3  低代碼核心技術 / 275
14.4.4  低代碼反思 / 278
14.5  持續集成/ 持續交付 / 281
14.5.1  概念理解 / 281
14.5.2  實現方案 / 282
14.5.3  持續集成與領域驅動設計 / 282
第15 章  測試驅動開發 / 283
15.1  TDD 基本理解 / 283
15.2  TDD 常見的誤區 / 284
15.3  TDD 技術選型 / 286
15.4  TDD 案例實戰 / 287
15.4.1  奇怪的計算器 / 287
15.4.2  貧血模型三層架構的TDD 實戰 / 297
15.4.3  DDD 下的TDD 實戰 / 304
第16 章  敏捷開發 / 309
16.1  敏捷開發介紹 / 309
16.1.1  敏捷開發價值觀 / 309
16.1.2  敏捷開發十二個原則 / 310
16.2  敏捷開發常用實踐方法 / 312
16.2.1  Scrum / 312
16.2.2  看板 / 314
16.2.3  極限編程 / 315
16.3  DDD+ 敏捷開發 / 318
16.3.1  以通用語言作為互動的基礎 / 318
16.3.2  從最小可行產品開始迭代 / 319
16.3.3  簡化文檔 / 319
16.3.4  使用子域的思想指導確定需求
優先級 / 319
16.3.5  持續反饋和改進 / 319
第17 章  架構可視化 / 320
17.1  架構可視化與C4 模型 / 320
17.1.1  系統上下文圖 / 322
17.1.2  容器圖 / 323
17.1.3  組件圖 / 324
17.1.4  代碼圖 / 325
17.1.5  系統全景圖 / 325
17.1.6  動態圖 / 326
17.1.7  部署圖 / 327
17.2  C4 模型規範和review
checklist / 329
17.2.1  C4 模型規範 / 329
17.2.2  review checklist / 329
17.3  使用文本繪制C4 架構圖 / 329
17.3.1  文本繪圖工具選型 / 329
17.3.2  VS Code 下C4-PlantUML 的
安裝 / 330
17.3.3  IntelliJ Idea 下C4-PlantUML 的
安裝 / 332
17.3.4  案例實戰及C4-PlantUML 語法
介紹 / 332
17.4  使用繪圖工具繪制C4 架構圖 / 338
17.4.1  繪圖工具的選擇 / 338
17.4.2  架構圖繪制實戰 / 338
17.4.3  架構圖繪制心得 / 342
第18 章  使用DDD 進行系統重構 / 343
18.1  系統重構的基本瞭解 / 343
18.2  系統重構的模式 / 343
18.2.1  修繕者模式 / 344
18.2.2  絞殺者模式 / 345
18.2.3  推翻重建模式 / 345
18.3  系統重構的基本流程 / 346
18.3.1  啟動 / 346
18.3.2  規劃 / 349
18.3.3  執行 / 351
18.3.4  監控 / 356
18.3.5  收尾 / 357
第19 章  佈道領域驅動設計 / 358
19.1  為團隊引入領域驅動設計 / 358
19.2  編碼指南 / 360
19.2.1  核心概念 / 360
19.2.2  應用架構 / 361
19.2.3  事務控制 / 364
19.2.4  研發效率 / 364
19.2.5  代碼質量 / 364
19.2.6  過程文檔 / 364
19.3  能力成熟度模型 / 365
19.3.1  軟件能力成熟度模型 / 365
19.3.2  領域驅動設計能力成熟度模型 / 365
第20 章  使用DDD 開發視頻直播服務 / 367
20.1  視頻直播技術介紹 / 367
20.2  視頻直播服務案例介紹 / 368
20.2.1  案例背景 / 368
20.2.2  核心業務邏輯 / 369
20.2.3  技術選型 / 369
20.3  使用DDD 實現視頻直播服務 / 370
20.3.1  領域建模 / 370
20.3.2  系統架構 / 371
20.3.3  代碼工程初始化 / 372
20.3.4  CQRS / 372
20.3.5  ACL / 374
20.3.6  Graceful Response / 374
20.3.7  接口自動化測試 / 376
20.4  案例運行截圖 / 377
20.4.1  直播間管理 / 377
20.4.2  主播管理 / 377
20.4.3  直播管理 / 378
第21 章  使用DDD 開發AIGC產品 / 382
21.1  AIGC 與DDD / 382
21.2  AIGC 案例介紹 / 382
21.2.1  案例背景 / 383
21.2.2  核心業務邏輯 / 383
21.2.3  系統架構 / 385
21.2.4  技術選型 / 385
21.3  DDD 開發AIGC 產品 / 385
21.3.1  領域建模 / 386
21.3.2  代碼工程初始化 / 387
21.3.3  CQRS / 387
21.3.4  領域服務 / 388
21.3.5  ACL / 390
21.3.6  Graceful Response / 391
21.3.7  接口自動化測試 / 391
21.4  案例運行截圖 / 393
21.4.1  創建日記接口 / 393
21.4.2  創建貼紙接口 / 394
21.4.3  根據貼紙生成日記正文接口 / 395