內容簡介
這是第一本也是唯一一本關於使用C#實現領域驅動設計的技術書籍,本書介紹了構建實際套用系統的全過程。本書的項目基於一個現有公司的實際系統,重點介紹了領域驅動設計和構建支持領域驅動設計的框架。
每一章都按照清晰的層次結構分成特定的模組,介紹了如何選擇最佳的解決方案,然後採取相應的設計來解決問題。所有章節構建了一個完整的項目,在創建系統代碼的過程中您可以學到重要的實踐技能。
本書主要內容
◆何時、為什麼以及如何使用領域驅動設計
◆如何設計和構建初始的領域模型
◆如何實現“持久化無關”
◆如何為領域模型構建倉儲框架
◆將TDD套用到領域模型的技能
◆如何套用模型—視圖—視圖模型模式
◆如何構建客戶端會員管理系統
◆如何將客戶系統和伺服器同步
本書讀者對象
本書面向有經驗的C#和.NET開發人員,以進一步提升讀者編寫高性能和可擴展的應用程式的技能。
作者簡介
Tim McCarthy是一名自由職業的諮詢師,他採用最新的Microsoft平台和技術設計和構建分層的Web和智慧型客戶系統。Tim是一個解決方案架構方面的Microsoft MVP,他精通各種各樣的Microsoft技術,不僅局限於以下技術:NET Framework(ASPNET/智慧型客戶NSTO/工作流/Web服務、Windows Presentation Foundation)、SQL Server、Active Directory、MS Exchange開發、UDDI、SharePoint和面向服務架構(SOA)套用。Tim不僅是一個項目技術主管/成員,而且在一些財富500強公司擔任技術諮詢。
圖書目錄
第1章 介紹項目:SmartGA系統
1.1 問題
1.2 設計
1.2.1 可靠性和可得性
1.2.2伸縮性
1.2.3 可維護性
1.2.4 富客戶套用功能
1.2.5 離線可得
1.2.6 Web訪問
1.2.7 智慧型安裝和自動更新功能
1.2.8 附加客戶設備支持
1.3 解決方案
1.3.1 滿足可靠性、可得性、伸縮性、離線可得和附加客戶設備支持需求
1.3.2 滿足可維護性需求
1.3.3 滿足富客戶套用功能需求
1.3.4 滿足Web訪問需求
1.3.5 滿足智慧型安裝和自動更新功能需求
1.4 總結
第2章 設計分層架構
2.1 問題
2.2 設計
2.2.1 設計Visual Studio解決方案
2.2.2 設計基礎設施層
2.3 解決方案
2.3.1 實現Visual Studio解決方案
2.3.2 實現架構層
2.4 總結
第3章 管理項目
3.1 問題
3.2 設計
3.2.1 設計領域模型
3.2.2 定義項目聚合
3.2.3 定義聚合邊界
3.2.4 設計倉儲
3.2.5 編寫單元測試
3.3 解決方案
3.3.1 Project類
3.3.2 實現倉儲
3.3.3 實現服務類
3.3.4 實現項目信息視圖模型
3.3.5 實現項目信息視圖
3.4 總結
第4章 公司和聯繫人
4.1 問題
4.2 設計
4.2.1 設計領域模型
4.2.2 定義Company聚合和Contact聚合
4.2.3 定義聚合邊界
4.2.4 設計倉儲
4.2.5 編寫單元測試
4.3 解決方案
4.3.1 Company類
4.3.2 Contact類
4.3.3 ProjectContact類
4.3.4 實現倉儲
4.3.5 實現服務類
4.3.6 Company視圖模型
4.3.7 Company視圖
4.3.8 項目聯繫人視圖模型
4.3.9 項目聯繫人視圖
4.4 總結
第5章 遞交傳送
5.1 問題
5.2 設計
5.2.1 設計領域模型
5.2.2 定義Submittal聚合
5.2.3 定義聚合邊界
5.2.4 設計倉儲
5.2.5 編寫單元測試
5.3 解決方案
5.3.1 實現Submittal倉儲
5.3.2 實現Submittal服務類
5.3.3 Submittal視圖模型
5.3.4 Submittal視圖
5.4 總結
第6章 信息請求
6.1 問題
6.2 設計
6.2.1 設計領域模型
6.2.2 定義RFI聚合
6.2.3 定義聚合邊界
6.2.4 設計倉儲
6.2.5 編寫單元測試
6.3 解決方案
6.3.1 實現RFI倉儲
6.3.2 實現RFI服務類
6.3.3 RFI視圖模型類
6.3.4 RFI視圖
6.4 總結
第7章 提案請求
7.1 問題
7.2 設計
7.2.1 設計領域模型
7.2.2 設計提案請求聚合
7.2.3 定義聚合邊界
7.2.4 設計倉儲
7.2.5 編寫單元測試
7.3 解決方案
7.3.1 提案請求類的私有欄位和構造器
7.3.2 ProposalRequest屬性
7.3.3validate方法
7.3.4 實現提案請求倉儲
7.3.5 實現提案請求服務類
7.3.6 提案請求視圖模型類
7.3.7 提案請求視圖
7.4 總結
第8章更改單
8.1 問題
8.2 設計
8.2.1 設計領域模型
8.2.2 設計更改單聚合
8.2.3 定義聚合邊界
8.2.4 設計倉儲
8.2.5 編寫單元測試
8.3 解決方案
8.3.1 實現更改單倉儲
8.3.2 實現更改單服務類
8.3.3 更改單視圖模型類
8.3.4 更改單視圖
8.4 總結
第9章 施工更改指令
9.1 問題
9.2 設計
9.2.1 設計領域模型
9.2.2 設計施工更改指令聚合
9.2.3 定義聚合邊界
9.2.4 設計倉儲
9.2.5 編寫單元測試
9.3 解決方案
9.3.1 施工更改指令類的私有欄位和構造器
9.3.2 實現施工更改指令倉儲
9.3.3 實現施工更改指令服務類
9.3.4 施工更改指令視圖模型類
9.3.5 施工更改指令視圖
9.4 總結
第10章 和伺服器同步
10.1 問題
10.2 設計
10.2.1 重新設計工作單元
10.2.2 設計同步
10.2.3 編寫單元測試
10.3 解決方案
10.3.1 工作單元重構
10.3.2 和Synchronizer類同步
10.4 總結
第11章 客戶會員管理系統
11.1 問題
11.2 設計
11.2.1 密碼安全
11.2.2 設計客戶會員管理系統
11.3 解決方案
11.3.1 客戶會員管理系統領域模型類
11.3.2 客戶會員管理系統單元測試
11.4 總結
序言
在閱讀了Eric Evans的書Domain-Driven Design,Tackling Complexity in the Heart Of Software之後,我設計軟體系統的方式完全改變了。之前,我常常以一種側重於以數據為中心設計軟體對象模型,我沒有真正聚焦於如何把行為和數據結合到對象中。我對這種新的思考方式感到如此震驚,因此我開始試圖找到能夠揭示Eric書中概念的代碼示例。我通常用Google搜尋我的領域驅動設計(DDD)問題的答案,並且確實發現有些東西對我有幫助,但我依然渴求更多關於這個主題的知識。
我不得不搜尋.NET中的DDD答案,因為Eric的書是與技術無關的。本書的要點是架構概念。裡面到處有Java和Smalltalk的代碼示例,但不是關於架構概念的。然後,就有了Jimmy Nilsson的書Applying Domain-Driven Design and Patterns,此時我開始看到可以用於連線DDD概念的更多模式。Jimmy把來自Martin Fowler的優秀書籍Patterns of Enterprise Application Architecture的一些概念結合起來,並說明它們如何有助於得到好的DDD設計原則。Jimmy也做了大量的工作,在他的書中提供了大量優秀的.NET代碼示例,並引導讀者體驗了幾種按照DDD實現操作的方法。就在我剛看完Jimmy的書後,我開始訂閱Yahoo!Groups上的DDD RSS Group feed,這也給了我很多幫助。在DDD小組中,我發現的一件事情是人們一直在尋找一個能夠揭示DDD原則的.NET相關套用。在閱讀了這些帖子之後,我決定撰寫這本書,把我懂得的關於如何使用DDD技術構建.NET套用的知識分享給開發人員社群。我猜我可能感覺有點內疚,因為我讀了小組裡如此多其他人的帖子,但我只是偶爾發帖。現在,我編寫了一本書代替發帖!可能這將促使我更多地融入這個小組。
我寫這本書的主要目的是吸取Eric、Martin和Jjmmy書中的思想和模式,構建一個真實的端到端.NET套用。我確實希望說明我如何使用DDD原則在.NET中構建一個領域模型的某些想法,但是,我並非只是構建老的.NET套用,我也要嘗試一些Microsoft在構建套用方面的最新技術,如Visual Studio 2008和.NET3.5框架。
本書讀者對象
本書針對希望精通面向對象的設計技巧和學習DDD的有經驗的.NET開發人員。如果您不在這個級別,也是可以的,但我建議您至少有一些編寫.NET代碼或者Java代碼的經驗。如果您之前沒有編寫過任何.NET代碼,則本書可能稍微有點難。
我也推薦您閱讀之前提到的Eric Evans、Jimmy Nilsson和Martin Fowler的書籍。您不一定要讀,但我強烈推薦閱讀,因為這有助於您更好地理解本書的許多設計和模式。
因為本書的每一章都建立在前一章的基礎上,所以我建議您按順序閱讀。