新到貨2本75折
深入實踐DDD:以DSL驅動複雜軟體發展

深入實踐DDD:以DSL驅動複雜軟體發展

  • 定價:594
  • 優惠價:87517
  • 運送方式:
  • 臺灣與離島
  • 海外
  • 可配送點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
  • 可取貨點:台灣、蘭嶼、綠島、澎湖、金門、馬祖
載入中...
  • 分享
 

內容簡介

本書是擁有二十年商務軟體開發經驗及十年技術管理經驗的資深技術專家嘔心瀝血之作,也是目前市場上少有的闡述如何通過使用領域專用語言(DSL)實現領域驅動設計(DDD)的圖書。
 
書中首先帶領讀者重溫DDD在戰術設計層面及戰略設計層面上的部分重要概念,並簡要介紹了自DDD社區興起的一些軟體架構模式。然後闡述如何設計一門DDD原生的DSL,包括這個DSL的規範支援哪些特性、如何説明團隊描述領域模型的方方面面、這些特性的選擇基於何種考量等。
 
然後在此基礎上詳細講解了如何使用技術工具將描述領域模型的DSL文檔直接轉化為可以工作的軟體代碼,在這個過程中結合諸多來自商務軟體開發工作中的真實案例,展示並分析了大量的關鍵代碼,讓讀者可以深入地瞭解製造那些基於DSL的DDD技術工具的秘密。
 
之後講述了一些建模案例,並探討了一些與DDD相關的其他話題,對讀者開拓技術思維、更深刻地理解DDD有所助益。

 

作者介紹

楊捷鋒,曾就職于南開戈德集團、普天集團、通路快建等公司。曾作為獨立技術顧問為海爾集團、瀋陽飛機工業集團、上廣電NEC、天馬微電子等企業提供軟體發展與技術諮詢服務。
 
目前在一家電商創業公司擔任技術負責人。有多個大型企業應用軟體的分析建模經驗,以及大型開發框架(ORM、IoC等)的架構經驗。多年來一直未脫離軟體發展一線工作,對軟體系統分析、資料建模、領域驅動設計、專案管理略有心得。

 

目錄

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

 

詳細資料

  • ISBN:9787111677710
  • 規格:平裝 / 396頁 / 16k / 19 x 26 x 1 cm / 普通級 / 單色印刷 / 初版
  • 出版地:中國

最近瀏覽商品

 

相關活動

  • 現代出版,由此開始。商務印書館暢銷展,精選滿888現折88。
 

購物說明

溫馨提醒您:若您訂單中有購買簡體館無庫存/預售書或庫存於海外廠商的書籍,建議與其他商品分開下單,以避免等待時間過長,謝謝。

大陸出版品書況:因裝幀品質及貨運條件未臻完善,書況與台灣出版品落差甚大,封面老舊、出現磨痕、凹痕等均屬常態,故簡體字館除封面破損、內頁脫落...等較嚴重的狀態外,其餘所有商品將正常出貨。 

 

請注意,部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

調貨時間:若您購買海外庫存之商品,於您完成訂購後,商品原則上約45個工作天內抵台(若有將延遲另行告知)。為了縮短等待的時間,建議您將簡體書與其它商品分開訂購,以利一般商品快速出貨。 

若您具有法人身份為常態性且大量購書者,或有特殊作業需求,建議您可洽詢「企業採購」。 

退換貨說明 

會員所購買的商品均享有到貨十天的猶豫期(含例假日)。退回之商品必須於猶豫期內寄回。 

辦理退換貨時,商品必須是全新狀態與完整包裝(請注意保持商品本體、配件、贈品、保證書、原廠包裝及所有附隨文件或資料的完整性,切勿缺漏任何配件或損毀原廠外盒)。退回商品無法回復原狀者,恐將影響退貨權益或需負擔部分費用。 

訂購本商品前請務必詳閱商品退換貨原則

  • 翦商作者新作79折
  • 針灸匠張寶旬
  • 浪漫小說精選3本72折