程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET中促進代碼重用的2種模式

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

編輯:.NET實例教程

開發復雜的動態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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved