求真百科歡迎當事人提供第一手真實資料,洗刷冤屈,終結網路霸凌。

實現領域驅動設計檢視原始碼討論檢視歷史

事實揭露 揭密真相
前往: 導覽搜尋
實現領域驅動設計

《實現領域驅動設計》是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]

參考文獻