領域驅動設計案例:Tiny Library:商務邏輯與系統結構

來源:互聯網
上載者:User

之前我發布了領域驅動設計的一個實踐案例:Tiny Library。本章介紹該案例實現的商務邏輯與系統結構設計。

 

商務邏輯

Tiny Library的商務邏輯非常簡單,主要就是如下兩條:

  1. 任何使用者可以添加Library中的圖書(簡化起見,圖書不能修改也不能刪除),也可以查看圖書的詳細資料
  2. 註冊使用者,也就是讀者,可以借書、還書、查看自己借過的圖書列表和借書資訊

篇幅有限,我就不在此將案例的操作過程一一了,讀者朋友們可以自己下載原始碼,然後在Visual Studio 2010中編譯運行。

 

系統結構

由於是領域驅動設計,本案例系統分層與傳統分層略有不同。分為四層:展現層、應用服務層、領域層和基礎結構層。展現層採用ASP.NET MVC架構實現;應用服務層則是一個WCF Service;領域層採用Entity Framework結合本人自己研發的Apworks Application Development Framework;基礎結構層則為整個應用提供了IoC、Caching、Specifications、Repository等的具體實現。整個系統架構基本上可以以描述:

 

需要說明的是,在中的Domain Model和EdmRepository之間出現了雙向依賴,於是我在邊上用黃色注釋文字作了註解。其實,Domain Model只依賴於倉儲(Repository)的介面,而EdmRepository是基於Entity Framework的一種倉儲實現方式,它實現IRepository介面,同時也對Domain Model產生依賴,以獲得對彙總根的訪問。關鍵的一步在於,Tiny Library採用依賴注入,將EdmRepository注射到Domain Model中,於是,Domain Model根本不依賴於倉儲的具體實現方式,保證了領域模型層面的純淨度。領域驅動設計的社區中有很多朋友都對這個問題產生疑問,Tiny Library就是一個回答該問題的很好的案例。

 

Visual Studio 2010解決方案結構

Tiny Library在Microsoft Visual Studio 2010的解決方案下包含六個項目:TinyLibrary.Design、TinyLibrary.Domain、TinyLibrary.Repositories、TinyLibrary.Services、TinyLibrary.WebApp以及TinyLibrary.WebApp.Tests。如下所示:

  1. TinyLibrary.Design:項目的一些設計圖稿,其中包括上面的架構圖。一般沒什麼用(注意:第一個版本的Tiny Library解決方案中不包含這個項目,不過沒關係,不影響大家的閱讀和學習)
  2. TinyLibrary.Domain:領域模型項目,其中包括了Tiny Library的領域模型與商務邏輯,也是本案例的核心所在。為了能夠以可視化的方式設計領域模型,也是為了採用Microsoft技術來實現案例,本項目採用了Microsoft Entity Framework作為建模工具
  3. TinyLibrary.Repositories:倉儲的具體實現項目,它引用TinyLibrary.Domain項目,同時引用Apworks組件以實現IRepository介面。本項目僅包含了針對Entity Framework的倉儲實現,同時也一併實現了Repository Transaction Context對象
  4. TinyLibrary.Services:WCF Application Service項目,它佔用3722連接埠,其目的是與Presentation層互動。互動採用Data Transferring Objects(DTO),實現上是一組位於DataObjects目錄下的Data Contracts。從這個項目可以看到,DTO與Entity/AggregateRoot並非是一一對應的,雖說在Tiny Library中,看上去是一個Entity/AggregateRoot對應一個Data Object,但仔細閱讀可以發現,這些Data Objects中包含的資料跟與之對應的Entity/AggregateRoot中包含的對象狀態是有出入的。這是根據應用程式的需求來決定的
  5. TinyLibrary.WebApp:本案例的主程式:一個ASP.NET Web應用程式,以ASP.NET MVC架構為基礎,提供使用者介面與互動介面
  6. TinyLibrary.WebApp.Tests:TinyLibrary.WebApp項目的單體測試專案,在本案例中,它是建立ASP.NET MVC項目時自動產生的,我沒有去寫或者修改任何Test Case,所以,可以直接無視這個項目

 

從下一講開始,我將詳細介紹Tiny Library的實現過程。這個過程不會是一步步的手把手教如何建立項目、如何編碼等,而是對領域驅動設計在Microsoft .NET技術下的實踐進行介紹。這些內容將包括:領域模型的實現、倉儲的設計與實現、WCF Service與DTO、ASP.NET MVC的整合、領域驅動設計案例答疑以及Apworks Application Development Framework簡介等。敬請期待!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.