Duwamish深入剖析-結構篇

來源:互聯網
上載者:User
Duwamish深入剖析-結構篇

摘要:本文深入詳細的介紹了Duwamish網上電子書店常式的結構架構,並詳細的分析了該結構的若干特點和設計模式。目錄:引言 Duwamish介紹 結構分析 設計思想 程式碼範例 總結 引言:能夠作為Visual Studio .Net附帶的例子,Duwamish一定包含了微軟.Net設計隊伍希望向開發人員傳達的某些資訊,而事實上,Duwamish也的確能夠稱作是一個.Net開發人員學習的經典樣本,無論是從其設計架構,編程技巧或代碼風格,都向我們展示了一個標準的.Net企業級應用程式所應該具有的特點。所以,通過研究Duwamish樣本,高手能夠領悟到.Net應用架構的設計思想,低手能夠學習到.Net的編程技巧,實在是老少皆宜。 :)不過,本文的目的更多的是針對中級.Net學習者,這類讀者往往已經熟悉了C#或者是VB.NET的文法,會用一些基本的類庫,並已經會做一些比較小的程式。但是當他們開始著手開發一個真正具有實用價值的企業級應用的時候,卻有種無處下手的感覺。如果你正巧屬於這類學習者,請跟著我深入到Duwamish的世界中去,相信你一定會得到收穫。Duwamish介紹:Microsoft公司每次推出新技術,總是會相應的推出一些公開原始碼的應用範例來說明該項新技術的特點,而開發人員也能通過研究該範例的代碼來達到迅速掌握新技術並與以實施的目的。Microsoft通過對一個虛擬在網上銷售圖書的電子商務公司網上銷售系統應用的建立,向使用者展現了典型的網上購物實踐中最為普遍的電子商務企業對客戶 (B2C) 模式,它包括成員資格、帳戶管理、購物車、搜尋和結帳過程等準系統。Duwamish經曆了三個版本4.0,5.0和7.0版,每一個版本的發布都印證了技術進步的過程,每一個版本都代表了當時最先進的技術動向。這裡將要研究和討論的是Duwamish的最高版本7.0版,經曆了COM/COM+技術以及Microsoft DNA架構的Duwamish,在最新的版本中完全採用了.Net技術及架構,比以前顯得更加先進和成熟。

如果您安裝了Visual Studio .Net的話,您可以在您的VS.Net 的Enterprise Samples目錄下找到並安裝它,例如:C:\Program Files\Microsoft Visual Studio .NET\Enterprise Samples\,或者您還可以到http://astradigital.com/Duwamish7Vb/這個地址去看看它在Internet的一個示範執行個體。其它有關Duwamish的詳細介紹資料請參考Visual Studio .Net附帶的MSDN協助,地址是:ms-help://MS.VSCC/MS.MSDNVS.2052/dwamish7/html/vtoriDuwamishBooks70.htm,這裡不再贅述。Duwamish結構分析:Duwamish 7.0 是一個典型的N層架構,其結構分為四個邏輯層: Web 層 Web 層為用戶端提供對應用程式的訪問。這一層是作為 Duwamish.sln 解決方案檔案中的 Web 項目實現的。Web 層由 ASP.NET Web Form和程式碼後置檔案組成。Web Form只是用 HTML 提供使用者操作,而程式碼後置檔案實現各種控制項的事件處理。 業務外觀層 業務外觀層為 Web 層提供處理帳戶、類別瀏覽和購書的介面。這一層是作為 Duwamish.sln 解決方案檔案中的 BusinessFacade 項目實現的。業務外觀層用作隔離層,它將使用者介面與各種業務功能的實現隔離開來。除了低級系統和支援功能之外,對資料庫伺服器的所有調用都是通過此程式集進行的。 商務規則層 商務規則層是作為 Duwamish.sln 解決方案檔案中的 BusinessRules 項目實現的,它包含各種商務規則和邏輯的實現。商務規則完成如客戶帳戶和書籍訂單的驗證這樣的任務。 資料訪問層 資料訪問層為商務規則層提供資料服務。這一層是作為 Duwamish.sln 解決方案檔案中的 DataAccess 項目實現的。 比較令人困惑的是其中的業務外觀層和商務規則層,很多人在學習N層結構開發的時候,聽得最多的是三層結構,分別為:展示層,中介層和資料層。Duwamish的WEB層和資料訪問層比較好理解,也就是傳統意義上的展示層和資料層,那麼業務外觀層和商務規則層和我們熟悉的中介層有什麼聯絡呢?設計思想: 在Web應用程式中,有部分操作只是簡單的從資料庫根據條件提取資料,不需要經過任何處理,而直接將資料顯示到網頁上,比如查詢某類別的圖書列表。而另外一些操作,比如計算定單中圖書的總價並根據顧客的層級計算回扣等等,這部分往往有許多不同的功能的類,操作起來也比較複雜。我們可以先想象一下,如果我們採用三層結構,這些商業邏輯一般是會放在中介層,那麼對內部的這些大量種類繁多,使用方法也各異的不同的類的調用任務,就完全落到了展示層。這樣勢必會增加展示層的代碼量,將展示層的任務複雜化,和展示層只負責接受使用者的輸入並返回結果的任務不太相稱,並增加了層與層之間的耦合程度。為瞭解決這個問題,我們先來看看《設計模式》一文中對Facade模式的描述:意圖:為子系統中的一組介面提供一個一致的介面,Facade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。適用性:當你要為一個複雜子系統提供一個簡單介面時。子系統往往因為不斷演化而變得越來越複雜。大多數模式使用時都會產生更多更小的類。這使得子系統更具可重用性,也更容易對子系統進行定製,但這也給那些不需要定製子系統的使用者帶來一些使用上的困難。Facade可以提供一個簡單的預設視圖,這一視圖對大多數使用者來說已經足夠,而那些需要更多的可定製性的使用者可以越過Facade層。 客戶程式與抽象類別的實現部分之間存在著很大的依賴性。引入Facade將這個子系統與客戶以及其他的子系統分離,可以提高子系統的獨立性和可移植性。 當你需要構建一個階層的子系統時,使用Facade模式定義子系統中每層的進入點。如果子系統之間是相互依賴的,你可以讓它們僅通過Facade進行通訊,從而簡化了它們之間的依賴關係。 結構圖:

上文提出的這個矛盾,正好和設計模式中Facade模式中所描述的需要解決的問題非常吻合,在《設計模式》中提出的解決的辦法就是引入一個Facade對象,讓這個Façade來負責管理系統內部類的調用,並為展示層提供了一個單一而簡單的介面。這個Façade對象,在我們的Duwamish的設計中,就是BusinessFacade(業務外觀)層。以下是Duwamish的結構關係圖:

我們可以清楚的看到,瀏覽器首先調用的是展示層WEB,然後WEB將請求發送給業務外觀層,業務外觀層對請求進行初步的處理,判斷是否需要調用商務規則層,還是直接調用資料訪問層擷取資料。最後由資料訪問層訪問資料庫並按照來時的步驟返回結果到瀏覽器(對於圖中涉及到其它的結構模組以後會分別予以詳細介紹)。程式碼範例:以下是兩種不同處理路徑的程式碼範例:擷取商品目錄 展示層調用業務外觀層:productSystem = new ProductSystem();categorySet = productSystem.GetCategories(categoryID);業務外觀層直接調用資料層:public CategoryData GetCategories(int categoryId) { if ( dsCommand == null ) { throw new System.ObjectDisposedException( GetType().FullName ); } return FillCategoryData("GetCategories", "@CategoryId", categoryId); } 添加定單 展示層調用業務外觀層:public void AddOrder() { ApplicationAssert.CheckCondition(cartOrderData != null, "Order requires data", ApplicationAssert.LineNumber); ApplicationLog.WriteTrace("Duwamish7.Web.Cart.AddOrder:\r\nCustomerId: " + cartOrderData.Tables[OrderData.CUSTOMER_TABLE].Rows[0][OrderData.PKID_FIELD].ToString()); cartOrderData = (new OrderSystem()).AddOrder(cartOrderData); } 業務外觀層調用商務規則層:public OrderData AddOrder(OrderData order) { ApplicationAssert.CheckCondition(order != null, "Order is required", ApplicationAssert.LineNumber); (new BusinessRules.Order()).InsertOrder(order); return order; } 商務規則層調用資料層:public bool InsertOrder(OrderData order) { //此處省略複雜的處理邏輯 if ( isValid ) { using (DataAccess.Orders ordersDataAccess = new DataAccess.Orders()) { return (ordersDataAccess.InsertOrderDetail(order)) > 0; } } else return false; } 總結:通過分析Duwamish7的結構設計,我們掌握了Façade模式,並學習到了如何通過Façade模式對應用結構進行改進,同時瞭解了Duwamish7的基本概念和處理流程,為以後深入分析和學習Duwamish7的的其它部分打下了一個基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.