ASP.NET下MVC設計模式的實現

來源:互聯網
上載者:User
作者: wrclub   出自:http://dev.csdn.net/

ASP.NET是微軟最新推出的新型體繫結構.NET架構的一部分,它為構造新一代動態網站和基於網路的分布式應用提供了強有力的支援。與以前的 Web 開發模型相比,ASP.NET 提供了許多重要的優點例如: 簡易性;安全性;可管理性等。而且與基於過程的ASP頁面技術相比,物件導向技術在ASP.NET中得到了完全實現。用傳統ASP技術建立的Web應用執行個體中,在頁面中同時實現顯示,商務邏輯和流程式控制制,這從工程化的角度考慮,它有許多不足之處。使用者介面承擔著向使用者顯示問題模型和與使用者進行操作和I/O互動的作用。使用者希望保持互動操作介面的相對穩定,但更希望根據需要改變和調整顯示的內容和形式。在.NET架構下ASP.NET技術結合MVC設計模式很好地解決了上述問題。

  1 MVC設計模式簡介

  MVC由Trygve Reenskaug提出,首先被應用在SmallTalk-80環境中,是許多互動和介面系統的構成基礎。MVC結構是為那些需要為同樣的資料提供多個視圖的應用程式而設計的,它很好的實現了資料層與展示層的分離。MVC作為一種開發模型,通常用於分布式應用系統的設計和分析中,以及用於確定系統各部分間的組織關係。對於介面設計可變性的需求,MVC(Model-View-Controller)把互動系統的組成分解成模型、視圖、控制器三種組件。

  視圖組件把表示模型資料及邏輯關係和狀態的資訊以特定形式展示給使用者。它從模型獲得顯示資訊,對於相同的資訊可以有多個不同的顯示形式或視圖。

  控制器組件是處理使用者與軟體的互動操作的,其職責是控制提供模型中任何變化的傳播,確保使用者介面於模型間的對應聯絡;它接受使用者的輸入,將輸入反饋給模型,進而實現對模型的計算控制,是使模型和視圖協調工作的組件。

  模型組件儲存由視圖顯示,由控制器控制的資料;它封裝了問題的核心資料、邏輯和功能的計算關係,它獨立於具體的介面表達和I/O操作。

  模型、視圖與控制器的分離,使得一個模型可以具有多個顯示視圖。如果使用者通過某個視圖的控制器改變了模型的資料,所有其它依賴於這些資料的視圖都應反映到這些變化。因此,無論何時發生了何種資料變化,控制器都會將變化通知所有的視圖,導致顯示的更新。這實際上是一種模型的變化-傳播機制。模型、視圖、控制器三者之間的關係和各自的主要功能,1所示。

2 MVC設計模式的實現

  ASP.NET提供了一個很好的實現這種經典設計模式的類似環境。開發人員通過在ASPX頁面中開發使用者介面來實現視圖;控制器的功能在邏輯功能代碼(.cs)中實現;模型通常對應應用系統的業務部分。在ASP.NET中實現這種設計而提供的一個多層系統,較經典的ASP結構實現的系統來說有明顯的優點。將使用者顯示(視圖)從動作(控制器)中分離出來,提高了代碼的重用性。將資料(模型)從對其操作的動作(控制器)分離出來可以讓你設計一個與後台儲存資料無關的系統。就MVC結構的本質而言,它是一種解決耦合系統問題的方法。

  2.1 視圖

  視圖是模型的表示,它提供使用者互動介面。使用多個包含單顯示頁面的使用者組件,複雜的Web頁面可以展示來自多個資料來源的內容,並且網頁人員,美工能獨自參與這些Web頁面的開發和維護。

  在ASP.NET下,視圖的實現很簡單。可以像開發WINDOWS介面一樣直接在整合式開發環境下通過拖動控制項來完成頁面開發本。本文中介紹每一個頁面都採用複合視圖的形式即:一個頁面由多個子視圖(使用者組件)組成;子視圖可以是最簡單HTML 控制項、伺服器控制項或多個控制項嵌套構而成的Web自訂控制項。頁面都由模板定義,模板定義了頁面的布局,使用者組件的標籤和數目,使用者指定一個模板,平台根據這些資訊自動建立頁面。針對靜態模板內容,如頁面上的網站導覽,菜單,友好連結,這些使用預設的模板內容配置;針對動態模板內容(主要是業務內容),由於使用者的請求不同,只能使用後期綁定,並且針對使用者的不同,使用者組件的顯示內容進行過濾。使用由使用者組件根據模板配置組成的組合頁面,它增強了可重用性,並原型化了網站的布局。

  視圖部分大致處理流程如下:首先,頁面模板定義了頁面的布局;頁面設定檔定義視表徵圖簽的具體內容(使用者組件);然後,由頁面配置策略類初始化並載入頁面;每個使用者組件根據它自己的配置進行初始化,載入校正器並設定參數,以及事件的委託等;使用者提交後,通過了展示層的校正,使用者組件把資料自動認可給業務實體即模型。

  這一部分主要定義了WEB頁面基類PageBase;頁面配置策略類PageLayout,完成頁面配置,用於載入使用者組件到頁面;使用者組件基類UserControlBase即使用者組件架構,用於動態載入檢驗組件,以及實現使用者組件的個人化。為了實現WEB應用的靈活性,視圖部分也用到了許多設定檔例如:置檔案有模板配置、頁面配置、路徑配置、驗證配置等。

  2.2 控制器

  為了能夠控制和協調每個使用者跨越多個請求的處理,控制機制應該以集中的方式進行管理。因此,為了達到集中管理的目的引入了控制器。應用程式的控制器集中從用戶端接收請求(典型情況下是一個運行瀏覽器的使用者),決定執行什麼商業邏輯功能,然後將產生下一步使用者介面的責任委派給一個適當的視圖組件。

  用控制器提供一個控制和處理請求的集中進入點,它負責接收、截取並處理使用者請求;並將請求委託給分發者類,根據目前狀態和業務操作的結果決定向客戶呈現的視圖。在這一部分主要定義了HttpReqDispatcher(分發者類)、HttpCapture(請求捕獲者類)、Controller(控制器類)等,它們相互配合來完成控制器的功能。請求捕獲者類捕獲HTTP請求並轉寄給控制器類。控制器類是系統中處理所有請求的最初進入點。控制器完成一些必要的處理後把請求委託給分發者類;分發者類分發者負責視圖的管理和導航,它管理將選擇哪個視圖提供給使用者,並提供給分發資源控制。在這一部分分別採用了分發者、策略、Factory 方法、適配器等設計模式。

  為了使請求捕獲者類自動捕獲使用者請求並進行處理,ASP.NET 提供低層級的請求/響應 API,使開發人員能夠使用 .NET 架構類為傳入的 HTTP 要求提供服務。為此,必須創作支援 System.Web.IHTTPHandler 介面和實現 ProcessRequest() 方法的類即:請求捕獲者類,並在web.config 的 <httphandlers> 節中添加類。ASP.NET 收到的每個傳入 HTTP 要求最終由實現 IHTTPHandler 的類的特定執行個體來處理。IHttpHandlerFactory 提供了處理 IHttpHandler 執行個體 URL 請求的實際解析的結構。HTTP 處理常式和工廠在 ASP.NET 配置中聲明為 web.config 檔案的一部分。ASP.NET 定義了一個 <httphandlers> 配置節,在其中可以添加和移除處理常式和工廠。子目錄繼承 HttpHandlerFactory 和 HttpHandler 的設定。 HTTP 處理常式和工廠是 ASP.NET 頁架構的主體。工廠將每個請求分配給一個處理常式,後者處理該請求。 例如,在全域 machine.config 檔案中,ASP.NET 將所有對 ASPx 檔案的請求映射到 HttpCapture類:

<httphandlers>
...
<add verb="*" path="*.ASPx" type="Sys.UI.HttpCapture, Sys.UI"/>
...
</httphandlers>

  2.3 模型

  MVC系統中的模型從概念上可以分為兩類――系統的內部狀態和改變系統狀態的動作。模型是你所有的商業邏輯程式碼片段所在。本文為模型提供了業務實體物件和業務處理對象:所有的業務處理對象都是從ProcessBase類派生的子類。業務處理對象封裝了具體的處理邏輯,調用商務邏輯模型,並且把響應提交到合適的視圖組件以產生響應。業務實體物件可以通過定義屬性描述用戶端表單資料。所有業務實體物件都EntityBase派生子類對象,業務處理對象可以直接對它進行讀寫,而不再需要和request、response對象進行資料互動。通過業務實體物件實現了對視圖和模型之間互動的支援。實現時把"做什麼"(業務處理)和"如何做"(業務實體)分離。這樣可以實現商務邏輯的重用。由於各個應用的具體業務是不同的,這裡不再列舉其具體代碼執行個體。

  3 MVC設計模式的擴充

  通過在ASP.NET中的MVC模式編寫的,具有極其良好的可擴充性。它可以輕鬆實現以下功能:

  ①實現一個模型的多個視圖;

  ②採用多個控制器;

  ③當模型改變時,所有視圖將自動重新整理;

  ④所有的控制器將相互獨立工作。

  這就是MVC模式的好處,只需在以前的程式上稍作修改或增加新的類,即可輕鬆增加許多程式功能。以前開發的許多類可以重用,而程式結構根本不再需要改變,各類之間相互獨立,便於團體開發,提高開發效率。下面討論如何?一個模型、兩個視圖和一個控制器的程式。其中模型類及視圖類根本不需要改變,與前面的完全一樣,這就是物件導向編程的好處。對於控制器中的類,只需要增加另一個視圖,並與模型發生關聯即可。該模式下視圖、控制器、模型三者之間的2所示。

圖 2 視圖、控制器、模型三者之間關係的

  同樣也可以實現其它形式的MVC例如:一個模型、兩個視圖和兩個控制器。從上面可以看出,通過MVC模式實現的應用程式具有極其良好的可擴充性,是ASP.NET物件導向編程的未來方向。

  4 MVC設計模式的優點及不足之處

  4.1 MVC的優點

  MVC的優點體現在以下幾個方面:

  (1) 可以為一個模型在運行時同時建立和使用多個視圖。變化-傳播機制可以確保所有相關的視圖及時得到模型資料變化,從而使所有關聯的視圖和控制器做到行為同步。

  (2) 視圖與控制器的可接插性,允許更換視圖和控制器對象,而且可以根據需求動態開啟或關閉、甚至在運行期間進行對象替換。

  (3) 模型的可移植性。因為模型是獨立於視圖的,所以可以把一個模型獨立地移植到新的平台工作。需要做的只是在新平台上對視圖和控制器進行新的修改。

  (4) 潛在的架構結構。可以基於此模型建立應用程式架構,不僅僅是用在設計介面的設計中。

  4.2 MVC的不足之處

  MVC的不足體現在以下幾個方面:

  (1)增加了系統結構和實現的複雜性。對於簡單的介面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率。

  (2)視圖與控制器間的過於緊密的串連。視圖與控制器是相互分離,但確實聯絡緊密的組件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。

  (3)視圖對模型資料的低效率訪問。依據模型操作介面的不同,視圖可能需要多次調用才能獲得足夠的顯示資料。對未變化資料的不必要的頻繁訪問,也將損害操作效能。

  (4) 目前,一般進階的介面工具或構造器不支援MVC模式。改造這些工具以適應MVC需要和建立分離的組件的代價是很高的,從而造成使用MVC的困難。

  5 結束語

  與軟體所處理問題的內在模型相比較,使用者介面是需要經常發生變化的,採用MVC設計模式可以在滿足對介面要求的同時,使軟體的計算模型獨立於介面的構成。也可以基於此模型建立大型分布式應用程式架構。本文介紹了MVC設計模式的原理;MVC設計模式三個組成構件(模型組件、視圖組件和控制組件)以及在ASP.NET環境下實現基於MVC的應用需要完成的工作;MVC設計模式的擴充;最後對MVC的優點及不足之處進行了分析。

相關文章

聯繫我們

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