EntityFramework之領域驅動設計實踐【后續篇】:基於EF 4.3.1 Code First的領域驅動設計實踐案例


兩年前我在博客中發布了《EntityFramework之領域驅動設計實踐》系列文章,也得到了廣大讀者朋友的關注,在完成了系列文章的總結之后,也一直沒有這部分內容的更新了。現在,Entity Framework的穩定版(就是那個Stable的版本,不是Entity Framework 5的beta版本)4.3.1已經逐步應用到各種.NET項目中,為了演示Entity Framework 4.3.1 Code First編程模式以及其它的一些.NET技術在領域驅動設計實踐上的應用,我重新采用經典的分層架構(也就是類似Microsoft NLayerApp的區別於CQRS的架構)實現了一個案例程序:Byteart Retail。在這個案例中,倉儲的實現不再采用NHibernate,而是使用的Entity Framework 4.3.1 Code First。雖然這個案例較為完整地從各方面展示了.NET技術在企業級程序中的應用,但Entity Framework確實是其亮點之一,因此,我將這篇介紹這個案例的文章也編排在原來的EF系列文章中。

案例概述

Byteart Retail以筆記本電腦在線銷售業務為背景,展示了Microsoft.NET技術以及領域驅動設計理念在軟件設計、架構與實踐中image的應用。在Byteart Retail之前,開源社區也有一些領域驅動設計的實踐案例,比如Microsoft Domain-Oriented NLayered Application Architecture、面向CQRS體系結構模式的Tiny Library CQRS等。與這些案例相比,Byteart Retail在領域驅動的實踐指導方面有一定的相似性和可比性,但它更注重Microsoft.NET技術與領域驅動設計相結合。比如,Byteart Retail案例對基於Entity Framework 4.3.1版本中Code First模式的倉儲實現進行了全方位的演示,這樣的Entity Framework倉儲設計,使得領域模型對象能夠完全設計為POCO對象而不需要依賴任何其它技術框架,因此,在對倉儲的選擇和使用上,就能夠做到“無縫替換”。另一方面,領域模型的設計也更為考究,實體、值對象的設計、聚合的划分等,都與系統業務緊密結合,相對於其它的演示案例更為成熟。從實現的業務邏輯上看,Byteart Retail大致實現了以下功能:

 

  1. 筆記本電腦商品的瀏覽
  2. 客戶賬戶注冊和基本信息查詢與修改
  3. 筆記本電腦詳細信息查詢
  4. 客戶添加筆記本電腦商品到購物籃
  5. 購物籃商品項目管理
  6. 從購物籃創建銷售訂單
  7. 銷售訂單的確認與查詢
  8. 銷售訂單明細查詢

案例對以下.NET技術和開發技巧進行了演示:

  1. Microsoft Entity Framework 4.3.1 Code First
  2. ASP.NET MVC 3
  3. WCF
  4. Microsoft Patterns & Practices Unity Application Block
  5. 使用AutoMapper實現DTO與領域對象映射
  6. T4自動化代碼生成

案例下載

【單擊此處】下載本案例的所有源代碼和Visual Studio 2010的解決方案文件。

系統需求

開發環境:Visual Studio 2010 Professional/Ultimate with SP1,ASP.NET MVC3。其它的程序集引用都在壓縮包的packages目錄下,因此讀者無需上網下載安裝其它組件。

安裝部署

數據庫

Byteart Retail采用Microsoft SQL Server 2008作為后台數據庫。首先,修改ByteartRetail.Services項目下的web.config文件,對數據庫鏈接字符串進行配置:

image

然后,按照下面“程序啟動”部分的描述,啟動ByteartRetail.Web項目,此時Entity Framework會根據上面的連接字符串創建一個名為ByteartRetail的數據庫。

最后,打開SQL Server Management Studio,執行壓縮包中SQL目錄下的ByteartRetailData.sql文件即可將所需的測試數據導入ByteartRetail數據庫中。

說明:這種數據庫的部署和初始化方式雖然能夠規避“Model compatibility cannot be checked because the database does not contain model metadata.”的錯誤,但仍然不是一個很理想的部署方式。在這里我們暫時采用這種方式讓案例先運行起來,以后我會找出一個更合理的辦法並對這部分內容進行更新。

程序啟動

使用Visual Studio打開解決方案並完成編譯,然后在ByteartRetail.Services項目中任選一個.svc文件點擊右鍵,並選擇View in Browser選項以啟動WCF Service;之后,直接運行ByteartRetail.Web項目,即可出現主界面。

設計概要

在此我先將部分設計的類圖貼出,以方便讀者朋友在查看源代碼的過程中參閱。

領域模型

 

基於Entity Framework的倉儲設計(省略屬性與方法)

 

規約設計

 

企業應用架構模式參考

本案例大致涉及到了以下企業級應用架構模式,也一並列舉於此,供讀者朋友們參考,也可以作為學習《Patterns of Enterprise Application Architecture》、《Core J2EE Patterns》等書籍的參考。

總結

熱烈歡迎愛好Microsoft.NET技術以及領域驅動設計的讀者朋友對本案例進行深入討論。有疑問或建議請直接留言回復。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM