天天看點

ASP.NET MVC概述

這篇文章幫助你了解關于ASP.NET MVC應用程式和ASP.NET Web Forms的不同。學習如何确定何時建立一個ASP.NET MVC應用。

模型-視圖-控制器(MVC)架構風格将應用程式分為了3個主要的部分:模型、視圖和控制器。ASP.NET MVC架構提供了一個ASP.NET Web Forms風格的新的選擇來建立基于MVC的Web應用。ASP.NET MVC架構是一個輕量級、容易測試表現層的架構(跟基于Web Form2-based應用一樣),将現有的ASP.NET特性,比如母版頁和基于Membership授權內建在一起。MVC架構被定義在System.Web.Mvc命名空間中,它是一個基礎,受到System.Web命名空間的支援。

MVC是一個許多開發者都熟悉的标準的設計模式。有一些Web應用程式都從MVC架構中受益。其它應用程式将會繼續使用基于Web Forms和postbacks(回傳)機制的傳統的ASP.NET應用程式風格。其它類型的Web應用将會合并這兩種方法。不是誰替代誰。

MVC架構包含以下部分:

<a href="http://i2.asp.net/asp.net/images/mvc/21/image001.png?cdn_id=2014-01-29-001"></a>

圖01:調用一個控制器動作時需要一個參數值

模型:模型對象是應用程式的部分來實作應用程式邏輯的資料域。通常的,模型對象檢索和存儲模型都在資料庫中。舉個例子,一個産品對象可能從資料庫中檢索,執行它,然後在SQL Server中寫回更新資訊到産品表。

在小型應用程式中,模型通常是将實體模型轉化為概念模型。舉個例子,如果應用程式隻讀一個資料集并把它發送給視圖,應用程式并沒有一個實體模型層和相關類。這樣的話,資料集充當模型對象的角色。

視圖:視圖是顯示應用程式使用者接口的元件。典型的,使用者接口是從模型資料建立的。一個例子就是一張産品表顯示基于産品對象目前狀态的文本框、下拉框和複選框。

控制器:控制器是用來處理使用者互動、與模型工作并最終選擇一個視圖用來呈現使用者接口的元件。在一個MVC應用程式中,視圖隻是用來顯示資訊;控制器處理和響應使用者輸入和互動。比如控制器處理查詢字元串的值以及把這些值傳給模型,模型可以使用這些值查詢資料庫并傳回給控制器。

MVC風格幫助你建立一個松耦合的、分離不同方面(輸入邏輯、業務邏輯和使用者接口邏輯)的應用程式。這個風格确定每個邏輯應該在應用程式中處于的位置。使用者接口邏輯在視圖中。輸入邏輯在控制器中。業務邏輯在模型中。當你建立一個應用程式時,這種分離會幫助你管理複雜的應用,因為它能夠幫助你将你的注意力一次集中在一個方面的實作。比如,你可以專注于視圖而不用關心它的業務邏輯。

除此以外,管理複雜的應用,MVC風格比基于Web Forms風格的ASP.NET Web應用程式更容易測試。舉個例子,在基于ASP.NET Web應用程式中,一個單獨的類被用來顯示輸出,同時也用來響應使用者輸入。書寫基于Web Forms的ASP.NET應用程式的自動化測試會變得複雜,因為測試一個獨立的頁面,你必須執行個體化頁面類、所有它的子控件和額外的應用程式中的獨立的類。因為如此多的類在運作頁面時被執行個體化,在獨立部分的應用程式中集中的、完全的書寫測試将會變得困難。基于ASP.NET應用程式的測試是以将會比在一個MVC的應用中更困難。更多的,測試基于Web Forms的ASP.NET應用程式需要一個Web伺服器。MVC架構解耦這些部分并且使得接口更加容易使用,在獨立的其餘架構部分測試成為可能。

在MVC應用程式的3個主要部分解耦,也可以提升并行開發。比如,第一個開發者可以做視圖,第二個開發者可以做控制器邏輯,第三個開發者可以專注于模型業務邏輯。

決定何時建立一個MVC應用

你必須認真考慮是使用ASP.NET MVC架構還是ASP.NET Web Forms模型來做一個Web應用。MVC架構并不是替代Web Forms模型。你可以使用其中的一種來做Web應用(如果你有一個現成的基于Web Forms的應用程式,最好還是使用已經擁有的技術來繼續工作)。

在你覺得使用MVC架構還是Web Forms模型來做一個特定的網站,權衡每一種方法的優點。

基于MVC架構的Web應用的優點

ASP.NET MVC架構提供了如下一些優點:

它通過将應用程式分為模型、視圖、控制器等幾個部分,來使得管理複雜的項目更容易。

它不使用ViewState和基于伺服器端的Forms。這使得MVC架構對于想完全控制應用程式行為的開發者來說很理想。

它提供了更好的測試驅動開發支援(TDD)。

它對控件團隊開發者和設計者之間的工作提供了支援。

基于Web Forms的Web應用的優點

基于Web Forms架構提供了如下一些優點:

它支援事件模型來保持HTTP通信,這使得Web應用開發從單線業務中受益。基于Web Forms的應用應用提供了大量的伺服器端控件的事件。

它使用ViewState和基于伺服器端的Forms,這能更容易的管理狀态資訊。

對于Web開發者和設計者團隊來說,可以更好的使用大量的伺服器端控件來進行快速應用開發。

一般來說,會降低應用程式開發的難度,因為元件(頁面類、控件等等)都高度內建,比MVC模型所需要的代碼量更少。

ASP.NET MVC架構的特性

ASP.NET MVC架構提供了如下的特性:

分離應用程式任務(輸入邏輯、業務邏輯和使用者接口邏輯),更容易測試并且原生支援測試驅動開發(TDD)。所有在MVC架構中的核心互動都基于接口,并且能夠使用模拟對象行為的模型對象進行測試。你可以不用運作ASP.NET程序中的控制器就可以進行單元測試,這使得單元測試很快而且靈活。你可以使用任何相容.NET架構的單元測試架構進行測試。

一個可擴充的支援注入的架構。ASP.NET MVC架構元件被設計以至于他們能夠容易替換和自定義。你可以在你自己的頁面引擎中使用注入,URL路由政策,Action方法參數序列化以及其它部分。ASP.NET MVC架構同樣支援依賴注入(DI)和控制反轉(IOC)。依賴注入允許你在類中注入對象,取代依靠類來建立對象自身。控制反轉确定另一個對象,第一個對象應該通過外部源比如配置檔案來擷取第二個對象。這使得測試更容易。

一個強有力的URL映射元件使得你建立應用程式更容易閱讀并被搜尋。URL并不會必須包含檔案名擴充,來被設計成支援URL命名風格更好的工作,并對搜尋引擎優化(SEO)和REST位址支援更好。

支援一個現有的ASP.NET頁面,使用者控件以及母版頁标簽檔案作為視圖模版,你可以用ASP.NET MVC架構使用到現有的ASP.NET特性,比如内嵌母版頁,單行表達式、服務端控件、模版、資料綁定、全球化等等。

支援現有的ASP.NET特性。ASP.NET MVC允許你使用如下特性,比如:Forms授權和Windows認證、URL授權、Membership和角色、輸出和資料緩存、Session和Profile狀态管理、health監控、配置系統以及Provider架構等。