文章目錄
- 基於MVC的Web程式的優勢
- 基於Web表單的程式的優勢
Model-View-Controller (MVC) 架構模式將一個應用程式分為三個組成部分:模型,視圖與控制器。ASP.NET MVC架構為建立基於MVC的Web應用程式提供了一種替代方案。ASP.NET MVC架構是一個輕量級的,可高度測試的展示架構(基於Web表單的應用程式),它繼承了現有的ASP.NET特性,比如主版頁面和成員資格許可權。 MVC架構定義在 System.Web.Mvc 命名空間下而且是System.Web 命名空間的基礎和支援部分。
MVC是很多開發人員都熟悉的標準設計模式。使用MVC的Web應用程式將會從中獲得好處,而其它不用的將會繼續使用傳統的基於Web表單和回傳的ASP.NET應用程式模式,還有的Web程式會結合兩者同時使用,而兩者卻又互不相干。
MVC 架構套件括以下三個部分:
圖01: 調用一個帶參數值的控制器動作(點擊查看完整大小)
- 模型. 模型對象是應用程式中實現程式資料域邏輯的部分。通常情況下,模型對象在資料庫中存模數型狀態。例如,一個Product對象可以從SQL Server資料庫中取得資訊,對其進行操作,然後將更新後的資訊寫回到Products表裡。
在小型的應用程式裡,模型一般是概念上的分隔而不是物理上的。例如,如果應用程式只是讀取一個資料集並把它發送到視圖中的話,應用程式並不需要一個物理的模型層和隔離類。在這種情況下,資料集就扮演了模型對象的角色。
- 視圖. 視圖是用來顯示應用程式使用者介面(UI)的組成部分。通常,這個UI是從模型資料裡建立的。舉個例子,Products表的編輯檢視就會用幾個輸入框,下拉框和複選框來表示當前Products對象的狀態。
- 控制器. 控制器是處理使用者互動,與模型打交道並最終選擇用來顯示UI的視圖的。在MVC應用程式中,視圖僅僅是顯示資訊;控制器處理並回應使用者的輸入與互動。例如,控制器處理查詢字串的值,並將這些值傳給模型,模型反過來用這些值來查詢資料庫。
MVC 模式協助你將應用程式分為幾個不同的方面(輸入邏輯,商務邏輯和UI邏輯),而降低了這幾個方面的耦合。此模式指定了各個邏輯分別應該位於應用程式的何處。UI邏輯屬於視圖。輸入邏輯屬於控制器。商務邏輯屬於模型。這樣劃分能幫你在產生應用程式的時候管理複雜度,因為它能讓你一次只專註於一個實現方面。例如,你可以只專註於視圖而不用依賴於商務邏輯。
除了管理複雜度,用MVC模式來測試程式比基於Web表單的應用程式更容易。例如,在基於Web表單的ASP.NET Web程式中,一個簡單的類,顯示輸出和響應使用者輸入都要做到。為基於Web表單的ASP.NET應用程式編寫自動化測試可能會很複雜,因為好比說測試個別頁面,你就得執行個體化頁面類,它的子控制項和其他的程式裡的依賴類。由於有這麼多的類被執行個體化來運行網頁,就會很難僅僅專註於測試程式中個別頁的部分。基於Web表單的ASP.NET程式的測試因此變得比MVC程式難以實現。而且,基於Web表單的ASP.NET程式需要一個Web伺服器。MVC架構將組件解耦並大量使用介面,這使得從其他架構中分離個別組件來進行測試成為可能。
MVC應用程式中的這三大組件的松耦合約時促進了並行開發。例如,一個開發人員可以做視圖,另一個可以做控制器邏輯,第三個可以專註於模型中的商務邏輯。
決定何時使用MVC程式
你必須考慮清楚到底是用ASP.NET MVC架構還是ASP.NET Web表單模型來實現Web應用程式。MVC架構並沒有替代Web表單模型;這兩個架構都可以用來開發Web程式。(如果你已經在用基於Web表單的程式,繼續使用它們也是沒錯的。)
在你決定要為網站使用MVC架構或Web表單模型之前,最好先權衡一下兩者哪個更好。
基於MVC的Web程式的優勢
ASP.NET MVC 架構有以下兩個優勢:
- 將應用程式分為模型,視圖和控制器利於管理複雜度。
- 不必使用檢視狀態(View State)或者伺服器表單。這使得MVC架構非常適合想要完全控製程序行為的開發人員。
- 使用前端控制器模式通過一個簡單的控制器來處理Web應用請求。這使你能夠設計支援豐富的路由基礎結構應用程式。更多資訊,請參考MSDN網站中的 前端控制器 。
- 更好的支援測試驅動開發(TDD)。
- 適合於需要高度控制整個程式行為的大型開發和設計團隊所支援的Web程式。
基於Web表單的程式的優勢
基於Web表單的程式有以下優勢:
- 支援通過HTTP預留狀態的事件模型,有利於業務流水線的Web程式開發。基於Web表單的程式提供了數十種支援數百種伺服器控制項的事件。
- 使用頁面控制器模式增加頁面功能。更多資訊,請參考MSDN網站中的頁面控制器 。
- 使用檢視狀態或伺服器表單,能使管理狀態資訊更容易。
- 適合於想要利用大量組件來進行快速開發的小型開發和設計團隊。
- 通常,程式開發相對沒那麼複雜,因為組件(頁面類,控制項等等)被緊密整合而且比MVC模型需要更少的代碼量。
ASP.NET MVC 架構特性
ASP.NET MVC 架構提供以下特性:
- 應用程式預設分為程式任務(輸入邏輯,商務邏輯和UI邏輯),可測試性和測試驅動開發(TDD)。MVC架構中的核心協議是基於介面和通過使用類比對象實現可測試,類比對象是程式中類比實際對象行為的對象。你可以不必運行ASP.NET進程來對程式進行單元測試,這使得單元測試更快而且更可靠。 你可以使用任何相容.NET Framework的單元測試架構。
- 可擴充和可插拔的架構。 ASP.NET MVC 架構組件這種設計方法使得它們可以輕鬆地替換和自訂。你可以插入你自己的視圖引擎,URL路由策略,action方法參數的序列化,還有其他的組件。 ASP.NET MVC 架構同時支援依賴注入(DI)和控制反轉(IOC)容器模型。DI允許你注入對象到類中,而不是依靠類來建立對象自己。IOC 指定如果一個對象需要另一個對象,第一個對象應該從外部源如配置來獲得第二個對象。這使得測試更為簡單。
- 強大的URL映射組件讓你產生能夠解析和檢索URL的程式。 URL不需要包括副檔名,並且被設計成支援URL命名模式,有利於搜尋引擎最佳化(SEO)和表象化狀態轉變(REST)。
- 支援使用現有ASP.NET頁面(.aspx檔案),使用者控制項(.ascx檔案)和主版頁面(.master檔案)等標記檔案的標記作為視圖模板。你可以使用帶有ASP.NET MVC架構的現有ASP.NET特性,如嵌套主版頁面,內聯運算式(<%= %>),聲明伺服器控制項,模板,資料繫結,本地化等等。
- 支援現有ASP.NET特性。ASP.NET MVC 讓你使用如forms身分識別驗證和Windows身分識別驗證,URL身分識別驗證,成員資格和角色,輸出和資料緩衝,session和profile狀態管理,健康監控,配置系統和provider架構等特性。
原文地址:http://www.asp.net/learn/mvc/tutorial-01-cs.aspx