第1部分領域驅動設計的原則與實踐
第1章什麼是領域驅動設計
1.1為復雜問題域創建軟件的挑戰
1.1.1未使用通用語言創建的代碼
1.1.2組織結構的缺乏
1.1.3泥球模式將扼殺開發
1.1.4缺乏對問題域的關注
1.2領域驅動設計模式如何管理復雜性
1.2.1DDD的戰略模式
1.2.2DDD的戰術模式
1.2.3問題空間與解空間
1.3領域驅動設計的實踐與原則
1.3.1專注於核心領域
1.3.2通過協作進行學習
1.3.3通過探索和實驗來創建模型
1.3.4通信
1.3.5理解模型的適用性
1.3.6讓模型持續發展
1.4領域驅動設計的常見誤區
1.4.1戰術模式是DDD的關鍵
1.4.2DDD是一套框架
1.4.3DDD是一顆靈丹妙藥
1.5要點
第2章提煉問題域
2.1知識提煉與協作
2.1.1通過通用語言達成共識
2.1.2領域知識的重要性
2.1.3業務分析員的角色
2.1.4一個持續過程
2.2與領域專傢一起獲得領域見解
2.2.1領域專傢與業務相關人員的對比
2.2.2對於業務的更深刻理解
2.2.3與你的領域專傢互動
2.3有效提煉知識的模式
2.3.1專注在最有意思的對話上
2.3.2從用例開始
2.3.3提齣有力的問題
2.3.4草圖
2.3.5CRC卡
2.3.6延遲對模型中概念的命名
2.3.7行為驅動開發
2.3.8快速成型
2.3.9查看基於紙麵的係統
2.4查看現有模型
2.4.1理解意圖
2.4.2事件風暴
2.4.3影響地圖
2.4.4理解業務模型
2.4.5刻意發現
2.4.6模型探討漩渦
2.5要點
第3章專注於核心領域
3.1為何要分解一個問題域
3.2如何捕獲問題的實質
3.2.1超越需求
3.2.2為達成什麼是核心內容的共識而捕獲領域願景
3.3如何專注於核心問題
3.3.1提煉問題域
3.3.2核心領域
3.3.3將你的核心領域當作一款産品而非一個項目
3.3.4通用域
3.3.5支撐域
3.4子域如何決定解決方案的形成
3.5並非一個係統的所有部分都會經過良好設計
3.5.1專注於清晰邊界而非完美模型
3.5.2一開始核心領域不必總是需要是完美的
3.5.3構建用於替代而非重用的子域
3.6如果沒有核心領域怎麼辦
3.7要點
第4章模型驅動設計
4.1什麼是領域模型
4.1.1領域與領域模型的對比
4.1.2分析模型
4.1.3代碼模型
4.1.4代碼模型是領域模型的主要錶現
4.2模型驅動設計
4.2.1預先設計的挑戰
4.2.2團隊建模
4.3使用通用語言將分析和代碼模型綁定在一起
4.3.1語言的生存周期將大於軟件
4.3.2業務語言
4.3.3開發人員和業務之間的轉譯
4.4基於通用語言進行協作
4.4.1通過使用具體示例來定製齣語言
4.4.2教導你的領域專傢專注在問題上而不要跳到解決方案
4.4.3塑造語言的最佳實踐
4.5如何創建有效的領域模型
4.5.1不要讓實情妨礙一個好模型
4.5.2僅對相關內容建模
4.5.3領域模型都是暫時有用的
4.5.4要十分清楚專業術語
4.5.5限製你的抽象
4.6何時應用模型驅動設計
4.6.1如果它不值得花費精力,則不要嘗試對其建模
4.6.2專注於核心領域
4.7要點
第5章領域模型實現模式
5.1領域層
5.2領域模型實現模式
5.2.1領域模型
5.2.2事務腳本
5.2.3錶模塊
5.2.4活動記錄
5.2.5貧血領域模型
5.2.6貧血領域模型和函數編程
5.3要點
第6章使用有界上下文維護領域模型的完整性
6.1單個模型的挑戰
6.1.1模型的復雜性可能會增加
6.1.2多個團隊處理單個模型
6.1.3模型語言中的歧義
6.1.4領域概念的適用範圍
6.1.5集成遺留代碼或第三方代碼
6.1.6領域模型並非企業模型
6.2使用有界上下文劃分和破除大模型
6.2.1定義模型的邊界
6.2.2子域和有界上下文之間的差異
6.3實現有界上下文
6.4要點
第7章上下文映射
7.1一個現實情況的映射
7.1.1技術的現實
7.1.2組織的現實
7.1.3映射一個相關現實情況
7.1.4用X標記核心領域的位置
7.2認識有界上下文之間的關係
7.2.1防止損壞層
7.2.2共享內核
7.2.3開放宿主服務
7.2.4分道揚鑣
7.2.5閤作關係
7.2.6一種上遊/下遊關係
7.3傳遞上下文映射
7.4上下文映射的戰略重要性
7.4.1保持完整性
7.4.2解決計劃的基礎
7.4.3理解所有權和職責
7.4.4揭示業務工作流中的混亂區域
7.4.5識彆非技術障礙
7.4.6鼓勵良好的溝通
7.4.7幫助加入的新員工
7.5要點
第8章應用程序架構
8.1應用程序架構
8.1.1分離應用程序的問題
8.1.2從領域的復雜性中進行抽象
8.1.3分層架構
8.1.4依賴倒置
8.1.5領域層
8.1.6應用程序服務層
8.1.7基礎架構層
8.1.8跨層通信
8.1.9隔離測試
8.1.10不要在有界上下文之間共享數據結構
8.1.11應用程序架構與用於有界上下文的架構的對比
8.2應用程序服務
8.2.1應用程序邏輯與領域邏輯的對比
8.2.2定義和公開能力
8.2.3業務用例協作
8.2.4應用程序服務錶示的是用例,而不是創建、讀取、更新和刪除
8.2.5作為實現詳情的領域層
8.2.6領域報告
8.2.7讀取模型與事務模型的對比
8.3應用程序客戶端
8.4要點
第9章團隊開始應用領域驅動設計通常會遭到的問題
9.1過分強調戰術模式的重要性
9.1.1將相同架構用於所有的有界上下文
9.1.2力求戰術模式盡善盡美
9.1.3錯誤估計構造塊對於DDD的價值
9.1.4專注於代碼而非DDD的原則
9.2缺失瞭DDD的真實價值:協作、通信和上下文
9.2.1由於低估上下文的重要性而産生大泥球
9.2.2未能成功創建UL將造成歧義和誤解
9.2.3由於缺乏協作將隻能設計專注於技術的解決方案
9.3在不重要的部分花費太多時間
9.4簡單問題復雜化
9.4.1將DDD原則應用到具有少量業務預期的瑣碎領域
9.4.2彆將CRUD作為反模式
9.4.3將領域模型模式用於每一個有界上下文
9.4.4問一問自己:額外的復雜性是否值得
9.5低估應用DDD的成本
9.5.1嘗試在沒有積極專注的團隊的情況下取得成功
9.5.2項目背後沒有領域專傢時的協作嘗試
9.5.3在非迭代式開發方法中進行學習
9.5.4將DDD應用到每一個問題
9.5.5為不必要的純粹性而犧牲實用主義
9.5.6尋求驗證會浪費精力
9.5.7永遠力求代碼之美
9.5.8DDD關乎的是提供價值
9.6要點
第10章應用DDD的原則、實踐與模式
10.1推廣使用DDD
10.1.1培訓團隊
10.1.2與業務人員進行交流
10.2應用DDD的原則
10.2.1理解願景
10.2.2捕獲所需的行為
10.2.3理解環境的現實情況
10.2.4對解決方案建模
10.3探究和實驗
10.3.1質疑假設
10.3.2建模是一項持續性活動
10.3.3不存在錯誤的模型
10.3.4靈活的代碼有助於探索發現
10.4讓隱式內容變得顯式
10.4.1處理歧義
10.4.2為事物命名
10.5問題解決人先行,技術專傢後行
10.6如何纔能知道我在正確地工作
10.6.1好用就足夠瞭
10.6.2實踐、實踐、實踐
10.7要點
第Ⅱ部分戰略模式:在有界上下文之間通信
第11章有界上下文集成介紹
11.1如何集成有界上下文
11.1.1有界上下文是獨立自主的
11.1.2在代碼層麵集成有界上下文的挑戰
11.1.3使用物理邊界來強製實現整潔的模型
11.1.4集成遺留係統
11.2集成分布式有界上下文
11.2.1集成用於分布式有界上下文的策略
11.2.2數據庫集成
11.2.3平麵文件集成
11.2.4RPC
11.2.5消息傳遞
11.2.6REST
11.3DDD使用分布式係統的挑戰
11.4分布式事務將損害可擴展性和可靠性
11.4.1有界上下文不必彼此保持一緻
11.4.2最終一緻性
11.5事件驅動響應式DDD
11.5.1展示響應式解決方案的彈性和可擴展性
11.5.2異步消息傳遞的挑戰和取捨
11.5.3RPC還有價值嗎
11.6SOA和響應式DDD
11.6.1將你的有界上下文視作SOA服務
11.6.2進一步處理微服務架構
11.7要點
第12章通過消息傳遞集成
12.1消息傳遞基礎
12.1.1消息總綫
12.1.2可靠的消息傳遞
12.1.3存儲轉發
12.1.4命令和事件
12.1.5最終一緻性
12.2使用NServiceBus構建一個電子商務應用程序
12.2.1係統設計
12.2.2從Web應用程序發送命令
12.2.3處理命令和發布事件
12.2.4使用消息傳遞網關讓外部HTTP調用變得可靠
12.2.5實踐中的最終一緻性
12.2.6有界上下文會存儲其本地所需的所有數據
12.2.7把所有內容都放在UI中
12.3維護消息傳遞應用程序
12.3.1消息版本管理
12.3.2監控和擴展
12.4將有界上下文與公共傳輸集成
12.4.1消息傳遞橋
12.4.2公共傳輸
12.5要點
第13章通過使用RPC和REST的HTTP來集成
13.1為何選用HTTP
13.1.1沒有平颱耦閤
13.1.2每個人都理解HTTP
13.1.3大量的成熟工具和庫
13.1.4內部測試你的API
13.2RPC
13.2.1在HTTP上實現RPC
13.2.2選擇一種RPC風格
13.3REST
13.3.1深入淺齣地解釋REST
13.3.2用於有界上下文集成的REST
13.3.3維護REST應用程序
13.3.4將REST用於有界上下文集成的缺點
13.4要點
……
第Ⅲ部分戰術模式:創建有效的領域模型
第Ⅳ部分有效應用程序的設計模式
· · · · · · (
收起)