實現領域驅動設計檢視原始碼討論檢視歷史
實現領域驅動設計 |
《實現領域驅動設計》是2014年3月電子工業出版社出版圖書,作者是Vaughn Vernon。
基本內容
定價:99.00元
出版時間:2014年3月
開本:16開
頁數:584頁
書名:實現領域驅動設計
出版社:電子工業出版社
作者:Vaughn Vernon(沃恩.弗農)
譯者:滕雲
ISBN:978-7-121-22448-5
圖書簡介
領域驅動設計(DDD)是教我們如何做好軟件的,同時也是教我們如何更好地使用面向對象技術的。它為我們提供了設計軟件的全新視角,同時也給開發者留下了一大難題:如何將領域驅動設計付諸實踐?Vaughn Vernon 的這本《實現領域驅動設計》為我們給出了全面的解答。
《實現領域驅動設計》分別從戰略和戰術層面詳盡地討論了如何實現DDD,其中包含了大量的最佳實踐、設計準則和對一些問題的折中性討論。《實現領域驅動設計》共分為14 章,在DDD 戰略部分,《實現領域驅動設計》向我們講解了領域、限界上下文、上下文映射圖和架構等內容,戰術部分包括實體、值對象、領域服務、領域事件、聚合和資源庫等內容。一個虛構的案例研究貫穿全書,這對於實例講解DDD 實現來說非常有用。
《實現領域驅動設計》在DDD 的思想和實現之間建立起了一座橋樑,架構師和程序員均可閱讀,同時也可以作為一本DDD 參考書。
推薦
著譯俱佳 ThoughtWorks資深諮詢師傾力譯、校,完整涵蓋DDD各方面知識提供大量示例代碼,案例貫穿全書 理論與實踐緊密銜接之典範,架構師、程序員境界提升不可或缺之必選書目。
目錄
序............... xix
前言............. xxi
致謝............ xxxi
關於作者................... xxxv
如何使用本書.........xxxvii
第1章 DDD入門...............1
我能DDD嗎?..................2
為什麼我們需要DDD.............5
如何DDD...................... 17
使用DDD的業務價值..............22
1.你獲得了一個非常有用的領域模型................22
2.你的業務得到了更準確的定義和理解............23
3.領域專家可以為軟件設計做出貢獻...........23
4.更好的用戶體驗....................23
5.清晰的模型邊界.....................24
6.更好的企業架構..............24
7.敏捷、迭代式和持續建模....................24
8.使用戰略和戰術新工具........................24
實施DDD所面臨的挑戰.....................25
虛構的案例,真實的實踐................... 33
本章小結.........................36
第2章 領域、子域和限界上下文.....................37
總覽....................... 37
工作中的子域和限界上下文............................. 38
將關注點放在核心域上............................. 42
戰略設計為什麼重要.................... 45
現實世界中領域和子域...................48
理解限界上下文..................... 53
限界上下文不僅僅只包含模型..................... 57
限界上下文的大小...................... 59
與技術組件保持一致................... 61
示例上下文........................ 62
協作上下文..................63
身份與訪問上下文..................69
敏捷項目管理上下文................. 71
本章小結....................................73
第3章 上下文映射圖............................75
上下文映射圖為什麼重要........................ 75
繪製上下文映射圖......................77
產品和組織關係........................79
映射3個示例限界上下文........................82
本章小結............................97
第4章 架構.......................99
採訪一個成功的CIO.................... 100
分層................................. 104
依賴倒置原則.................... 107
六邊形架構(端口與適配器)..................... 110
面向服務架構.......................114
REST................................117
REST作為一種架構風格...........................117
RESTfulHTTP服務器的關鍵方面 ........................................ 118
RESTful HTTP客戶端的關鍵方面 ........................................ 119
REST和DDD..................... 120
為什麼是REST?......................... 121
命令和查詢職責分離——CQRS................. 121
CQRS的各個方面........................ 123
處理具有最終一致性的查詢模型.................. 128
事件驅動架構................... 129
管道和過濾器..................... 131
長時處理過程(也叫Saga)................... 134
事件源...................... 140
數據網織和基於網格的分布式計算....................... 143
數據複製..................... 144
事件驅動網織和領域事件.................. 145
持續查詢................... 145
分布式處理...................... 146
本章小結............................ 148
第5章 實體......................... 149
為什麼使用實體......................... 149
唯一標識............................ 151
用戶提供唯一標識......................... 152
應用程序生成唯一標識........................... 153
持久化機制生成唯一標識............................ 156
另一個限界上下文提供唯一標識..................... 160
標識生成時間..................... 161
委派標識......................... 163
標識穩定性.......................... 165
發現實體及其本質特徵............................. 167
揭開實體及其本質特徵的神秘面紗................. 168
挖掘實體的關鍵行為.......................... 172
角色和職責......................... 176
創建實體......................... 181
驗證................................... 183
跟蹤變化............................ 192
本章小結................................ 192
第6章 值對象..................... 193
值對象的特徵.......................... 194
度量或描述.......................... 195
不變性........................... 195
概念整體................................ 196
可替換性.......................... 199
值對象相等性..........................200
無副作用行為............................. 201
最小化集成..................204
用值對象表示標準類型........................206
測試值對象........................ 210
實現.............................. 214
持久化值對象................. 219
拒絕由數據建模泄漏帶來的不利影響..................220
ORM與單個值對象................................ 221
多個值對象序列化到單個列中.....................224
使用數據庫實體保存多個值對象....................225
使用聯合表保存多個值對象..........................229
ORM與枚舉狀態對象........................................230
本章小結....................... 233
第7章 領域服務.................................235
什麼是領域服務(首先,什麼不是領域服務).................. 237
請確定你是否需要一個領域服務................................ 238
建模領域服務.................. 241
獨立接口有必要嗎.............................244
一個計算過程..........................246
轉換服務........................249
為領域服務創建一個迷你層.........................250
測試領域服務............................250
本章小結.................. 253
第8章 領域事件...............................255
何時/為什麼使用領域事件.......................... 255
建模領域事件.................... 258
創建具有聚合特徵的領域事件................... 263
身份標識............................264
從領域模型中發布領域事件.............................. 265
發送方................... 265
訂閱方.....................269
向遠程限界上下文發布領域事件............................. 271
消息設施的一致性........................... 271
自治服務和系統............................. 272
容許時延.................. 273
事件存儲.................. 274
轉發存儲事件的架構風格........................... 279
以REST資源的方式發布事件通知....................... 279
通過消息中間件發布事件通知.................. 283
實現............................284
發布NotificationLog............... 285
發布基於消息的事件通知..............................290
本章小結........................297
第9章 模塊................................299
通過模塊完成設計..................................299
模塊的基本命名規範..........................302
領域模型的命名規範...........................302
敏捷項目管理上下文中的模塊..............................305
其他層中的模塊..................308
先考慮模塊,再是限界上下文...............................309
本章小結......................... 310
第10章 聚合...................... 311
在Scrum核心領域中使用聚合........................ 312
第一次嘗試:臃腫的聚合....................... 313
第二次嘗試:多個聚合........................... 314
原則:在一致性邊界之內建模真正的不變條件................317
原則:設計小聚合............................. 319
不要相信每一個用例............................ 321
原則:通過唯一標識引用其他聚合......................... 322
通過標識引用使多個聚合協同工作 ...................................... 324
建模對象導航性............................ 325
可伸縮性和分布式............................. 326
原則:在邊界之外使用最終一致性............................. 327
誰的任務?............................ 328
打破原則的理由......................... 329
理由之一:方便用戶界面................................. 329
理由之二:缺乏技術機制............................. 330
理由之三:全局事務.......................................... 331
理由之四:查詢性能.................................. 331
遵循原則.................... 332
通過發現,深入理解............................... 332
重新思考設計............................... 332
估算聚合成本............................. 334
常見用例場景........................ 335
內存消耗............................ 336
探索另外的設計................................... 337
實現最終一致性.............................. 338
這是Scrum團隊成員的任務嗎?......................... 339
決定的時候到了.............................. 341
實現........................................ 341
創建具有唯一標識的根實體........................ 342
優先使用值對象...................... 343
使用迪米特法則和「告訴而非詢問」原則 ...............344
樂觀並發...............346
避免依賴注入................348
本章小結................................ 349
第11章 工廠................. 351
領域模型中的工廠................. 351
聚合根中的工廠方法............................. 352
創建CalendarEntry實例................... 353
創建Discussion實例............................ 357
領域服務中的工廠.......................... 358
本章小結.......................... 361
第12章 資源庫...........................363
面向集合資源庫...........................364
Hibernate實現...................... 369
TopLink實現.................... 377
面向持久化資源庫........................ 379
Coherence實現............................ 381
MongoDB實現......................... 386
額外的行為...................................... 391
管理事務................................. 393
警告................................. 397
類型層級............................... 397
資源庫 vs數據訪問對象(DAO)..............................400
測試資源庫.......................................... 401
以內存實現進行測試...................404
本章小結................................407
第13章 集成限界上下文...............................409
集成基礎知識....................................409
分布式系統之間存在根本性區別.......................411
跨系統邊界交換信息...............................411
通過REST資源集成限界上下文......................... 417
實現REST資源.......................... 418
使用防腐層實現REST客戶端........... 421
通過消息集成限界上下文................ 428
從Scrum的產品負責人和團隊成員處得到持續通知 .................... 428
你能處理這樣的職責嗎?..................... 434
長時處理過程,以及避免職責............. 439
長時處理過程的狀態機和超時跟蹤器 .................................. 450
設計一個更複雜的長時處理過程 ..........................................460
當消息機制或你的系統不可用時 ...........................................464
本章小結.................................465
第14章 應用程序..................467
用戶界面...................................469
渲染領域對象............. 470
渲染數據傳輸對象................... 471
使用調停者發布聚合的內部狀態 .......................................... 471
通過領域負載對象渲染聚合實例 .......................................... 472
聚合實例的狀態展現............................. 473
用例優化資源庫查詢...................... 474
處理不同類型的客戶端................... 474
渲染適配器以及處理用戶編輯............. 475
應用服務 ............................................ 478
示例應用服務 ................................ 478
解耦服務輸出 .....................485
組合多個限界上下文 .....................487
基礎設施 ...............................489
企業組件容器 ....................490
本章小結 ....................494
附錄A 聚合與事件源:A+ES ..........................495
應用服務內部 ....................... 496
命令處理器 .....................505
Lambda語法...................508
並發控制 ....................... 510
A+ES所帶來的結構自由性 .............. 513
性能 ............................ 513
實現事件存儲 ..................... 516
關係型持久化 .................. 520
BLOB持久化 ...................... 522
專注的聚合 ............................ 523
讀模型投射 ........................... 524
與聚合設計一道使用 ................ 527
增強事件 ........................... 527
工具和模式 ................... 529
事件序列器 .......... 530
事件不變性 ................ 531
值對象 ..................... 531
協議生成 .................... 534
單元測試和需求規範 .............. 535
事件源和函數式語言 .......... 536
參考文獻 ..................539
作者簡介
Vaughn Vernon是一個經驗豐富的軟件工匠,在軟件設計、開發和架構方面擁有超過25年的從業經驗。他提倡通過創新來簡化軟件的設計和實現。從20世紀80年代開始,他便開始使用面向對象語言進行編程;在 20世紀 90年代早期,他便在領域建模中應用了領域驅動設計,那時他使用的是Smalltalk語言。他在很多業務領域都有從業經驗,包括航空、環境、地理、保險、醫學和電信等領域。同時,Vaughn在技術上也取得了很大的成功,包括開發可重用的框架和類庫等。他在全球範圍之內提供軟件諮詢和演講,此外,他還在許多國家教授《實現領域驅動設計》的課程。你可以通過個人網站訪問到他的最新研究成果。他的Twitter:@VaughnVernon。[1]
參考文獻
- ↑ 基於領域驅動設計的物流平台系統實現豆丁網,2011-03-25