有關ASP.NET MVC架構的一些基礎知識

來源:互聯網
上載者:User

MVC(模型—視圖—控制器)結構模式把一個應用程式拆分成三個主要組件:模型、視圖和控制器。在建立基於MVC架構的Web應用程式時,你可以把ASP.NET MVC架構作為ASP.NET Web表單模式方案的一種重要候選。較之於基於Web表單的應用程式,ASP.NET MVC架構是一個輕量級的、測試性強的描述架構,它能夠與現有ASP.NET特徵(例如主版頁面面和基於成員資格的認證)緊密整合。MVC架構定義於System.Web.Mvc命名空間中。

長時間以來,MVC是一種為眾多開發人員所熟悉的標準設計模式。一些類型的Web應用程式受益於MVC架構,而另一些將繼續使用基於Web表單與回寄技術的傳統型ASP.NET應用程式模式,還有一些類型的Web應用程式則有可能把這兩種模式結合到一起使用。總之,MVC架構方案與Web表單方案並非相互排斥的。

總體來看,MVC架構套件括下列組件:

(一)模型。模型對象是實現應用程式資料域邏輯的部分。經常情況下,模型對象還負責從資料庫中檢索和儲存模型狀態。例如,一個產品對象有可能從一個資料庫中檢索資訊,操作其中的資料,然後把更新資訊寫回SQL Server資料庫中的某一個產品表格內。

【提示】在小型應用程式中,模型經常是一個概念上的分離而不是一個物理概念。例如,如果應用程式僅讀取一個資料集並且要把它發送到視圖中,那麼應用程式就不必專門建立一個物理模型層和相關聯的類。在這種情況下,資料就直接承擔了一個模型對象的角色。

(二)視圖。視圖是負責顯示應用程式的使用者介面(UI)的組件。典型情況下,這個UI是基於模型資料建立的。一個典型的樣本就是一個產品表格的編輯檢視。在此視圖中,可以基於一個產品對象的目前狀態顯示文字框、下拉式清單方塊和複選框等控制項。

(三)控制器。控制器組件的作用是負責處理使用者互動,操作模型,並且最終選擇一個要顯示UI的視圖並產生之。在一個MVC應用程式中,視圖僅僅負責顯示資訊,而由控制器負責處理和響應使用者輸入與互動。例如,由控制器來處理查詢字串值,並且把這些值傳遞到模型,然後在模型中使用該值進行資料庫查詢。

MVC模式在協助你把應用程式的不同方面(輸入邏輯,商務邏輯和UI邏輯)分離開來的同時,提供了這些元素之間的松耦合。MVC模式要求每一種不同的邏輯應該存在於應用程式中的特定位置。例如,UI邏輯隸屬於視圖,而輸入邏輯隸屬於控制器,商務邏輯則隸屬於模型。這種分離有助於你在構建一個應用程式管理複雜性,因為它能夠使你在某一時刻僅專註於實現的一個方面。例如,你可以專註於視圖而不去關心商務邏輯。

除了管理複雜性外,較於測試一個傳統型ASP.NET Web應用程式,基於MVC模式進行開發使得測試應用程式更加容易。例如,在一個傳統型ASP.NET Web應用程式中,單個的類既用於顯示輸出也用於響應使用者輸入。因此,為傳統型ASP.NET應用程式編寫自動化測試可能非常複雜,因為為了測試單個頁面,你必須執行個體化頁面類,它所有的子控制項以及應用程式中的其他依賴類。總之,你需要執行個體化大量的類才能夠運行該頁面,所以這種情況下要比針對應用程式的單個組件編寫測試困難得多。於是,針對傳統型ASP.NET應用程式的測試很可能比實現一個使用MVC架構開發的應用程式的測試要複雜和艱難得多。而且,一個傳統型ASP.NET應用程式在測試時還需要使用一個Web伺服器。相比之下,MVC架構把組件分離開來並且大量地使用介面,這使得有可能獨立於架構的其他部分而較容易地單獨測試單個組件。

此外,一個MVC應用程式的三個主要組件之間的松耦合特徵還推動了平行開發。例如,一名開發人員可以開發視圖,而另一名開發人員則在開發控制器邏輯,第三名程式員則可以專註於模型部分的商務邏輯的開發。

基於MVC架構Web應用程式的優點

歸納來看,ASP.NET MVC架構主要提供了下列優點:

通過把一個應用程式分離成相互獨立的模型、視圖和控制器三部分而進一步提高了應用程式複雜性的管理。

不再使用檢視狀態或基於伺服器的表單技術。這使得MVC架構特別有利於想全面控制一個應用程式的行為的開發人員。

使用一種前端控制器(Front Controller)模式並通過單一的控制器來處理Web應用程式請求。這一特徵使你有可能設計出一個支援極其豐富的路由基礎結構的應用程式。有關於前端控制器的更多的資訊,請參考http://go.microsoft.com/fwlink/?LinkId=106357。

提供對於測試驅動開發(TDD)的大力支援。

基於Web表單Web應用程式的優點

傳統型基於Web表單的架構能夠提供下列優點:

支援事件模型。此模型能夠保留HTTP傳輸過程中的狀態,而這十分有利於線上業務式Web應用程式的開發。基於Web表單的應用程式提供大量的事件,所有這些事件都得到數以百計的伺服器控制項的支援。

使用一種頁面控制器(Page Controller)模式,此模式能夠把許多功能添加到單個的頁面。有關於頁面控制器的更多的資訊,請參考http://msdn.microsoft.com/zh-cn/library/ms978764.aspx。

使用檢視狀態或基於伺服器的表單,這使得狀態資訊管理更加容易。

ASP.NET MVC架構特徵

概括來看,ASP.NET MVC架構大致提供了下列重要特徵:

實現應用程式基底本任務(輸入邏輯,商務邏輯和UI邏輯)的分離,支援測試及測試驅動開發(TDD)。MVC架構中所有的核心契約都是基於介面的,因此十分利於使用mock對象(這是一些類比應用程式中實際對象的類比對象)測試工程。你可以對應用程式進行單元測試而不必在真正的ASP.NET進程中運行控制器,這加快了單元測試的速度和靈活性。你可以使用與.NET架構相相容的任何單元測試架構測試你的工程。

提供了一個可擴充的和可插接的架構。ASP.NET MVC架構組件的設計支援使用者十分容易地對它們進行替換或定製。你可以設計並加入你自己的視圖引擎,URL路由策略,行為方法參數序列化,以及其它組件。ASP.NET MVC架構還支援使用現有依賴性注入(即“Dependency Injection”,簡稱“DI”)和控制反轉(IOC)容器模型。其中,DI允許你把對象注入到一個類中,而不是依賴於類去建立對象本身。而IOC指定,如果一個對象要求使用另一個對象,那麼第一個對象應該從一個外部源(例如一個設定檔)得到第二個對象。這一支援極有利於對工程的測試。

實現了一個強有力的URL映射組件,支援你在應用程式中構建易於理解的可搜尋的URL(而不是像諸多Web應用URL中的那種極其複雜的表達方式)。如今,URL中不必包括副檔名,而且其設計還支援URL命名模式。因此,這種模式有利於搜尋引擎最佳化(SEO)和REST(具象狀態傳輸)定址。

支援在現有ASP.NET頁面(.aspx檔案)、使用者控制項(.ascx檔案)以及主版頁面面(.master檔案)標記檔案中把標記用作視圖模板。你可以在使用ASP.NET MVC架構的過程中繼續使用現有ASP.NET特徵,例如嵌套的主版頁面面,內聯運算式(<%=%>),聲明性伺服器控制項,模板,資料繫結,本地化,等等。

支援現有ASP.NET特徵。ASP.NET MVC架構支援你使用例如表單和Windows認證,URL授權,會員和角色,輸出緩衝和資料緩衝,會話和配置狀態管理,健康監視,配置系統,提供者架構,以及其它ASP.NET特徵。

URL映射

典型情況下,在一個ASP.NET網站中,URL會被映射到儲存在磁碟上的檔案(主要是指.aspx檔案)。這些.aspx檔案中將包括針對用戶端發出的請求要處理的代碼或標記。

ASP.NET MVC架構以不同於ASP.NET網站應用程式程式的方式把URL映射到伺服器代碼。MVC架構不是把URL映射到ASP.NET頁面或HTTP處理器程式,而是直接把URL映射到特定的控制器類。然後,由控制器類負責處理髮來的請求,例如使用者輸入與互動,以及基於使用者輸入執行適當的應用程式及資料邏輯。典型地,一個控制器類調用一個單獨的視圖組件來產生相應的HTML輸出作為對用戶端發出請求的響應。

在ASP.NET MVC架構中,模型、視圖和控制器組件被分離開來。典型地,模型組件主要負責維護資料庫中持久資料的狀態,而視圖組件則由控制器進行選擇並最終在用戶端產生相應的UI。預設情況下,ASP.NET MVC架構使用現有ASP.NET頁面(.aspx),主版頁面面(.master)和使用者控制項(.ascx)類型作為在瀏覽器端的輸出形式。控制器組件將定位控制器中適當的行為方法,取得用作行為方法的參數值,處理執行行為期間所有可能發生的錯誤,並產生要求的視圖。每一組組件各自存在於一個MVC Web應用程式工程的一個單獨的檔案夾下。

通過提供了一個URL映射引擎,ASP.NET MVC架構在把映射URL到控制器類方面提供了相當的靈活性。你可以使用這種映射引擎來定義路由規則,然後ASP.NET MVC架構使用這些路由規則來計算髮來的URL請求並選擇要執行的控制器。你還可以讓路由引擎自動地分析URL中定義的變數並且使ASP.NET MVC架構把這些內容以參數方式傳遞給控制器。

MVC架構與頁面回寄

ASP.NET MVC架構並不使用傳統的ASP.NET回寄模型來實現與伺服器端的互動。代之的是,所有的終端使用者互動都被路由到一個控制器類。這有利於保持UI邏輯和商務邏輯的分離,並且有助於測試目的。結果是,ASP.NET檢視狀態和ASP.NET頁面生命週期事件並沒有與基於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.