Duwamish架構分析篇

DuwamishMicrosoft提供一個企業級的分佈式系統架構,如果開發企業級的分佈式系統,可以模仿這種架構,如果是開發一些簡單的系統,則完全可以簡化。

 

以前也學習過Duwamish範例,只是發現不同時間,不同經歷,有不同的體會。正如盧彥所說的一樣:通過研究Duwamish示例,高手能夠領悟到.Net應用架構的設計思想,低手能夠學習到.Net的編程技巧,實在是老少皆宜。

 

因此,這裏再次學習並體驗一次Duwamish範例。

 

1Duwamish 7.0 結構分爲四個邏輯層(FROM MSDN):

Web Presentation

Web 層爲客戶端提供對應用程序的訪問。這一層是作爲 Duwamish.sln 解決方案文件中的 Web 項目實現的。Web 層由 ASP.NET Web 窗體和代碼隱藏文件組成。Web 窗體只是用 HTML 提供用戶操作,而代碼隱藏文件實現各種控件的事件處理。

業務外觀層 Business Facade

業務外觀層爲 Web 層提供處理帳戶、類別瀏覽和購書的界面。這一層是作爲 Duwamish.sln 解決方案文件中的 BusinessFacade 項目實現的。業務外觀層用作隔離層,它將用戶界面與各種業務功能的實現隔離開來。除了低級系統和支持功能之外,對數據庫服務器的所有調用都是通過此程序集進行的。

業務規則層 Business Rules

業務規則層是作爲 Duwamish.sln 解決方案文件中的 BusinessRules 項目實現的,它包含各種業務規則和邏輯的實現。業務規則完成如客戶帳戶和書籍訂單的驗證這樣的任務。

數據訪問層 Data Access

數據訪問層爲業務規則層提供數據服務。這一層是作爲 Duwamish.sln 解決方案文件中的 DataAccess 項目實現的。

 

除了上述四個邏輯層外,Duwamish 7.0 還包含封裝在 Duwamish.sln 解決方案文件中的 Common 項目內的共享函數。“通用”(Common) 層包含用於在各層間傳遞信息的數據集。Common 項目還包含 Duwamish.sln 解決方案文件中的 SystemFramework 項目內的應用程序配置和跟蹤類。

 

2,各個邏輯層之間的關係圖(FROM MSDN)及其調用Sequeance圖示例:


 

下面是Categories.aspx web頁面獲取CategoryDescription的整個調用過程。

1)實例化ProductSystem對象

2)調用ProductSystemGetCategories()方法

3)檢測參數的合法性

4)創建Categories::DataAccess對象實例

5)返回上述對象

6)調用Categories::DataAccess對象的GetCategories()方法

7)創建CategoryData::Common對象實例

8)返回上述對象

9)返回CategoryData::Common對象實例,該實例中已經包含了需要的數據

10)返回CategoryData::Common對象實例給web/Client

11)檢測數據的合法性

12)讀取並顯示結果:CategoryDescription



SystemFramework項目包含一些application需要的配置參數,ApplicationLog日誌類和ApplicationAssert參數校驗類。SystemFramework項目爲所有其他的項目所引用。

 

Common項目包含了用於在各層間傳遞信息的數據集,如上述的CategoryData繼承System.Data.DataSet,既不是所謂的typed DataSet,也不是一般的DataSet,不過簡單實用,這是基於.Net Remoting開發分佈式系統用來tiertier之間交互數據的一種方法。Common項目也被其他的項目引用,SystemFramework項目除外。

 

BusinessFacade項目中所有的Classes繼承MarshalByRefObject class,顯然是讓準備將BusinessFacade tier部署爲Remote Objects。不過,實際上默認這裏並沒有將其部署爲Remote ObjectsWeb層仍然調用本地對象(《Duwamish部署方案篇》將分析這個問題)。

 

3Summary

 

在開發基於.Net Framework企業級分佈式系統時,上述架構值得推薦,但也並非完美無暇,實際上存在一些值得改進的地方。顯然,不可能一個範例適合所有的實際情況麼,要求太苛刻了。其實,Enterprise Samples中的另外一個範例Fitch and Mather 7.0,其架構和Duwamish就有些不同了。

 

如果是開發本地的系統,就不要模仿Duwamish架構(看看上面獲取CategoryDescription調用過程就知道了,太費勁。),如Business FacadeBusiness RulesClasses應採用fine-grained interface設計,層與層之間的交互參數也不必全部採用DataSet,適當的時候採用setter/getter就可以了,這樣不僅可以提高開發效率,而且有助於提高performance, maintainability and reusability

 

轉自:http://www.cnblogs.com/rickie/archive/2004/10/29/57951.html

發佈了17 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章