1.2 什麼是ASP.NET MVC?
ASP.NET MVC提供了基於.NET Framework開發Web應用程式另一種選擇。最早發佈於2007年11月份,現在已經發布了4個版本。發佈於2011年1月的ASP.NET
MVC 3.0是第一個基於.NET架構 4.0的版本。ASP.NET MVC 4.0可以運行在.NET 4.0和.NET
4.5之上。
MVC是Model-View-Controller的縮寫,是Web開發領域非常流行的設計模式。
作為Web表單的另一個分支技術,ASP.NET MVC採取了不同的構建Web應用程式的方式。這以為你可以不用處理ASPX頁面、控制項、回傳、檢視狀態(ViewState)和複雜的基於事件的頁面生命週期。你只需要定義控制器(Controller)、活動(Action)和視圖(View),底層的ASP.NET平台保持不變,像Http處理常式(Http
Handler)和Http模組(Http Modules)仍然可用,你甚至可以在一個Web應用程式中混合使用MVC和Web表單兩種技術。ASP.NET
MVC和ASP.NET Web Form將在核心ASP.NET Framework之上並肩前行。
ASP.NET Web Pages
你可能在圖1.2上發現第三種基於ASP.NET
Framework的技術—ASP.NET Web Pages。
ASP.NET Web Pages與ASP.NET MVC3同時發布,作為初學者,如果你想學習ASP.NET的話,可以選擇除了Web
Forms和MVC的ASP.NET
Web Pages技術。它也比較適合開發簡單的網站,它的很多技術是和ASP.NET MVC共用的,如果你學習了ASP.NET
Web Pages,那麼你可以非常輕鬆的遷移到MVC開發。
你可以用Visual Studio開發ASP.NET
Web Pages程式,但微軟發布了專門針對它開發的平台:WebMatrix。他沒有Visual
Studio那些複雜的特性,只提供了Web開發必須的功能。介紹WebMatrix超出了本書的範圍,但本書中的一些例子是牽涉到ASP.NET
Web Pages的內容的。其中就包括Razor模板引擎,它是ASP.NET
MVC中使用C#或VB產生HTML的新方法。
圖1.2 不同的ASP.NET技術之間的關係
我們將在本書講解ASP.NET架構的所有核心特性。以下是你想學到的ASP.NET MVC一些優勢:
- 對HTML代碼完全控制;
- 對URL完全控制;
- 更好的關注點分離;
- 可擴充性;
- 可測試性;
隨著對本書閱讀的深入,這些優勢將逐個呈現。現在,我們將學習一下ASP.NET MVC架構所依賴的底層模式。為什麼選擇MVC模式?它來自哪裡?
1.2.1 MVC模式
上世紀70年代,MVC模式起源於SmallTalk開發組織,然而卻是隨著Ruby
on Rails(2003年)的出現變得普及開來。
MVC模式有3個組成部分
模型——軟體開發圍繞的領域。如果正在構建Blog系統,涉及的模型可能是Post和Comment。在一些上下文中,術語Model有可能指代視圖特定模型,視圖特定模型指只針對使用者介面顯示目的的領域模型。
視圖——模型的呈現,架構通常用視圖將內容呈現給瀏覽器,呈現結果的形式一般是標記語言。比如通過html顯示一篇部落格的內容。
控制器——是將視圖和模型聯絡在一起,是視圖與模型的協調者,主要負責接收用戶端輸入,操作模型並決定執行哪個Action(是顯示一個視圖還是跳轉到其他頁面),在部落格系統中,可以通過控制器尋找某篇文章的最近回複資訊並調用恰當的視圖,將之呈現出來。
圖1.3展示了視圖、模型和控制器之間是如何關聯到一起的。
圖1.3 MVC組件。
控制器接收使用者輸入,構建恰當的模型傳遞給視圖。控制器和視圖都依賴模型,但模型本身的構建不依賴控制器和視圖。
在.NET Framework中,ASP.NET MVC並不是首先實現MVC模式的。受Ruby on Rails的啟發,開源架構MonoRail早在2005年就在Web開發中引入了MVC模式。我們現在在ASP.NET
MVC中仍能看到它的一些理念和影響。
另外,在.NET平台上,除了ASP.NET MVC和MonoRail,還有一些其他的基於MVC的架構。包括:FubuMvc(http://mvc.fubu-project.org,一個開源的基於約定(Convention)的架構;OpenRasta(http://openrasta.org),一個致力於Web應用程式和Web服務開發的,基於資源和HTTP模組概念的開源項目。
通過引入MVC模式,ASP.NET MVC具有ASP.NET Web Form沒有的一些優勢。
1.2.2 ASP.NET MVC的改進
作為在.NET平台開發Web應用程式更好的選擇,ASP.NET MVC解決了ASP.NET Web Form很多不足之處。
更接近協議
HTTP協議是無狀態的,ASP.NET Web Form架構努力隱藏這個HTTP的本質。然而ASP.NET通過引入MVC模式,將一個HTTP請求映射到一個方法調用,具有Web開發背景的程式員通常會非常熟悉這種開發體驗。模型也被徹底簡化了,脫離了Web
Form中基於事件的複雜的頁面生命週期,同時對HTTP的抽象也是最小化的。
關注點分離
ASP.NET Web Form中使用者介面和代碼是緊耦合的。ASP.NET MVC提倡使用者介面和代碼(用於驅動介面顯示)分離的設計。這意味著程式員可以更好的控制和維護應用程式,因為當你改變控制器代碼時,不必必須改變使用者介面。
增強可測試性
通過將應用程式邏輯和介面相分離,ASP.NET MVC使得可以很容易獨立測試各個組件。可以單獨測試控制器類而不必測試實際的使用者介面。不像傳統的Web Forms,MVC控制器並不依賴於臭名昭著的HttpContext類,而是依賴於一個抽象功能約定,所以這很容易做自動化的單元測試。
迄今為止,你已經知道了ASP.NET MVC的一些優勢,接下來我們將簡單學習一下該架構的第3個版本相對於老版本有什麼新的特性。