獲取下載鏈接
標籤
領域驅動設計(DDD)是教我們如何做好軟件的,同時也是教我們如何更好地使用面向對象技術的。它為我們提供了設計軟件的全新視角,同時也給開發者留下了一大難題:如何將領域驅動設計付諸實踐?Vaughn Vernon 的這本《實現領域驅動設計》為我們給出了全面的解答。 《實現領域驅動設計》分別從戰略和戰術層面詳盡地討論瞭如何實現DDD,其中包含了大量的最佳實踐、設計準則和對一些問題的折中性討論。《實現領域驅動設計》共分為14 章,在DDD 戰略部分,《實現領域驅動設計》向我們講解了領域、限界上下文、上下文映射圖和架構等內容,戰術部分包括實體、值對象、領域服務、領域事件、聚合和資源庫等內容。一個虛構的案例研究貫穿全書,這對於實例講解DDD 實現來說非常有用。 《實現領域驅動設計》在DDD 的思想和實現之間建立起了一座橋樑,架構師和程序員均可閱讀,同時也可以作為一本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 RESTful HTTP服務器的關鍵方面 ........................................ 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
《大規模分佈式存儲系統》
《大規模分佈式存儲系統:原理解析與架構實戰》是分佈式系統領域的經典著作,由阿里巴巴高級技術專家“阿里日照”(OceanBase核心開發人員)撰寫,陽振坤、章文嵩、楊衛華、汪源、餘鋒(褚霸)、賴春波等來自阿里、新浪、網易和百度的資深技術專家聯袂推薦。理論方面,不僅講解了大規模分佈式存儲系統的核心技術和...
查看詳情 →《漫談設計模式》
模式引入計算機科學領域已經有20餘年了,最初人們側重於面向對象的設計,而現在已經應用於計算機領域的各個方面,它們對計算機產生了深遠影響。 若想一本書涵蓋所有模式,那麼這本書將會非常龐大,以前的設計模式書籍專注於介紹設計模式,雖然讀者瞭解了這些設計模式,但是仍然不知道如何合理地使用它們,往往導致讀者為...
查看詳情 →《鳳凰架構》
這是一本從架構視角講解如何構建大型分佈式系統的著作,是超級暢銷書《深入理解Java虛擬機》的作者周志明多年架構和研發經驗的總結,得到了多位行業資深架構專家的聯袂推薦。 全書共16章,分為演進中的架構、架構師的視角、分佈式的基石、不可變基礎設施和技術方法論五部分。 第一部分 演進中的架構(第1章) 著...
查看詳情 →《Spring Cloud微服務實戰》
《Spring Cloud微服務實戰》從時下流行的微服務架構概念出發,詳細介紹了Spring Cloud針對微服務架構中幾大核心要素的解決方案和基礎組件。對於各個組件的介紹,《Spring Cloud微服務實戰》主要以示例與源碼結合的方式來幫助讀者更好地理解這些組件的使用方法以及運行原理。同時,在介...
查看詳情 →