ASP.NET中促進代碼重用的2種模式

來源:互聯網
上載者:User

開發複雜的動態ASP.NET應用程式時,必須盡量減少重複代碼,提高應用程式的重用性和靈活性。在某些應用程式中,使用者採取的不同操作可能具有不同的控制器邏輯,但結果都是相同的視圖(例如顯示一個產品列表時,可能允許使用者增添或刪除一件產品。但在控制器引導使用者完成了添加或刪除過程後,最終顯示的都是同樣的產品視圖,其中含有修改過的資料)。 

開發可重用的程式邏輯時,第一步就是盡量減少伺服器指令碼頁中的代碼數量。指令碼頁中的邏輯很難(有時甚至不可能)重用,造成視圖和控制器分離得不夠好。另外,它的測試和調試也顯得異常困難。所以,不要將指令碼代碼添加到一個.aspx頁中,更有效做法是使用類來實現控制器。這樣可在整個Web應用程式中統一外觀和導航機制,並可在整個應用程式的範圍內重用表示(呈現)邏輯。

實現ASP.NET應用程式的控制類時,可採用兩種不同的模式。在用Page Controller模式構建的應用程式中,導航模式是靜態,但網頁是動態產生的。對於更複雜的應用程式,如果導航是動態,或者要求根據一個規則集(例如使用者權限或應用程式狀態)來配置,那麼使用Front Controller模式可獲得一個更有效實現。下面將詳細討論這兩種模式。

Page Controller模式

使用Page Controller模式時,要由名為BaseController的一個中心類來實現需要的所有公用行為,以便處理HTTP請求、更新模型以及將請求轉寄給恰當的視圖。BaseController提供的通用功能包括會話管理、安全性以及從查詢字串或隱藏欄位中檢索資料。針對Web應用程式中的每個連結,你都需要建立一個獨立的PageController類,該類要從BaseController類繼承。這些獨立的PageController負責實現網頁特有的任何行為,並直接使用已由BaseController實現的核心功能。

許多時候,你的應用程式可以分解成一系列公用網頁類型,它們共用通用的邏輯。例如,你可能有一系列資料輸入頁或者網格視圖頁,它們全部共用相同的邏輯。在這種情況下,最好實現一個DataEntryController或者一個GridViewController,並要求它們從BaseController類繼承。基於這些衍生類別,你可實現自己PageController,並使用現成的公用方法。但要注意的是,繼承層次不能太複雜,否則應用程式邏輯會變得難以維護。為了盡量縮短繼承鏈,你可建立一系列“助手類”,它們含有一系列公用代碼,可在任何一個繼承層級上調用。

為了實現Page Controller模式,你可從System.Web.UI.Page繼承一個BaseController類,然後實現通用的應用程式功能。例如,BaseController可提供頁首、頁尾和一些使用者特有的資訊(例如登入名稱稱和部門等),從而實現一致的外觀與感覺。接著可從這個BaseController類繼承,並由繼承的類(放在程式碼後置檔案中)來實現網頁所特有的邏輯,從而建立應用程式需要的每一個頁。對於中等複雜程度的應用程式,如果它具有固定的導航路徑,就尤其適合採用這一模式。相反,如果需要動態導航能力,則需要採用Front Controller模式。
 
Front Controller模式 

如果需要在多個網頁之間進行合作式處理,Page Controller模式的效率會大打折扣,因為它要求為每個邏輯性的網頁都實現一個對象。在這種情況下,Front Controller模式顯得更有效,因為它用一個控制器來接收所有請求,然後通過一個處理常式和命令類的一個階層來引導請求。處理常式從HTTP請求中擷取參數,選擇正確的命令並執行之。每個命令對象都執行了指定的操作後,它判斷需要用哪個視圖來正確地呈現網頁。通過實現Front Controller,可獲得更集中的應用程式控制,因為所有網頁請求都通過單獨一個控制器,而非由不同的Page Controller進行處理。但這樣做也不是沒有代價的:如果處理常式進行一些高開銷的處理,比如進行資料庫尋找,就可能導致整個應用程式的運行速度變慢。所以,處理常式應儘可能高效,而且只有在絕對必要時才使用外部資源。還應考慮對任何外部資源進行緩衝,以提高處理常式的效能。

為了實現FrontController類,你需要建立一個Handler(處理常式)和一個CommandFactory,後者用於確定為了響應一個請求而需要執行的命令。ASP.NET提供了IHttpHandler介面,它允許開發人員建立為傳入的HTTP請求提供服務所需的自訂介面。為了實現Handler,你需要從System.Web.IHttpHandler繼承,並添加相應的邏輯,以便從CommandFactory中執行個體化和調用恰當的命令。CommandFactory定義了一個命令集合,以及用於判斷應該執行什麼命令的邏輯。調用CommandFactory會返回恰當的Command對象,而Handler可調用該對象的Execute方法。採用這種模式,你可擴充CommandFactory邏輯,並建立附加的命令來處理不同的實際情況,從而建立出更可靠的導航機制,並集中地實現它們。

結構化模式

.NET結構師應儘可能地使用結構化模式。使用ASP.NET內建的特性,很容易就能實現Page Controller和Front Controller這樣的模式。利用它們可獲得具有高度重用性和擴充性的應用程式設計。對於這些模式以及其他結構化模式,要瞭解它們的更多資訊以及ASP.NET實現的細節,請訪問Microsoft .NET Architecture Center。
 



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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