ASP.NET MVC是微軟公司的一款WEB開發框架,整合了“模型-視圖-控制器”架構的高效與整潔,是敏捷開發最現代的思想與技術。它是傳統ASP.NET WebForm的一個完善的替代品。 1、當今的Web開發 1)REST(Representational State Transfer)已經成為應 ...
ASP.NET MVC是微軟公司的一款WEB開發框架,整合了“模型-視圖-控制器”架構的高效與整潔,是敏捷開發最現代的思想與技術。它是傳統ASP.NET WebForm的一個完善的替代品。
1、當今的Web開發
1)REST(Representational State Transfer)已經成為應用程式在HTTP上互操作的主要體系架構,完全使SOAP失色。REST是根據表示真實世界實體的資源(URI)和表示在這些資源上可用的標準操作方法(HTTP方法)來描述一個應用程式。通過HTTP方法與資源地址的組合就可以對資源執行相應的操作,這種組合就是REST,執行這種操作的請求也稱為REST化的請求。(對於REST的理解個人還是不透徹,後面會對此概念進行補充)
當前的Web應用程式不只是提供HTML服務,通常也需要將XML或JSON數據提供給用戶,而WebForm很難支持。
2)整個軟體行業向著敏捷與測試驅動開發方向的發展,如單元測試工具(NUnit、xUnit)、模仿框架(Moq、Rhino、Mocks)、控制反轉容器(Ninject、AutoFac)、持續集成伺服器(CruiseControl、TeamCity)、對象關係映射器(NHibernate、Subsonic、EF、Dapper、Petapoco)、UI自動化工具的提供。(測試驅動開發TDD思想:首先描述想要得到的行為範例,稱為測試規範;然後進行軟體設計,這樣通過執行依附於這一實現的一套測試,來驗證應用程式的穩定性和正確性)
3)順應Web標準和REST化的趨勢。
2、ASP.NET WebForm的歷史與問題
ASP.NET WebForm的技術堆棧,如下圖所示:
此圖的含義是WebForm建立在ASP.NET之上,而ASP.NET又建立在.NET平臺之上,MVC框架所起的作用是替代WebForm。
WebForm的設計思想是,讓Web開發在感覺上與Windows Form開發相同。開發者不再需要以一系列獨立的HTTP請求與響應進行工作,可以認為它是一種狀態化的UI,人們可以忘記WEB及其無狀態本質,轉而用一種“拖--放”式設計器來創建UI,並設想所有事情都發生在伺服器上。
隨著時間的推移,WebForm在實際項目中出現了一些缺陷:
1)視圖狀態重負:維護狀態的實際機制,也就是ViewState(視圖狀態)導致在客戶端與伺服器之間傳輸大塊數據(達到幾百KB),而且來回於每次請求之間,導致響應時間很慢,增加了伺服器的帶寬需求;
2)頁面生命周期:連接客戶端與伺服器端事件處理器代碼的機制很複雜,對於應用程式運行期間很難進行維護;
3)關註分離的錯誤理念:本身將代碼從HTML提取出來,放到後臺代碼類中進行處理是很一種很好的方式,但是一些開發者在後臺代碼中將表現代碼與應用業務邏輯混合在一起,導致最後代碼混亂並難以維護;
4)HTML的受限控制:伺服器控制項將自己渲染成HTML,但並不是所希望看到的HTML,在ASP.NET 4之前,並不能很好的使用CSS。同時會生成不可預知或複雜的ID,這樣JavaScript就很難進行訪問。
5)有缺陷的抽象:WebForm試圖儘量隱去HTML和HTTP(這是通過WebForm的抽象層實現的)。當你實現自己的方法時,需要放棄這種抽象,迫使採取回發事件機制的逆向工程。所以這種抽象對於開發者而言就構成一個極大的障礙和挑戰;
6)低可測試性:WebForm的這種緊耦合體繫結構並不適合於單元測試,對於集成測試也很具有挑戰性;
3、ASP.NET MVC的特點
1)ASP.NET MVC框架實現了MVC模式(MVC模式在1978年就已經提出來了),由於ASP.NET MVC極大的改善了關註分離,所以特別適用於Web應用程式。因為與MVC應用程式的交互遵循著用戶動作與視圖更替的自然周期,在這個周期中,假設視圖是無狀態的。這與支撐Web應用程式的HTTP請求與響應方式非常吻合。
2)可擴展性,MVC框架被構建成一系列獨立的組件,如路由系統、視圖引擎、控制器工廠,你可以很容易地用一個自己的不同實現來替換這些組件,通常有三種選擇:
a、使用組件現行的預設實現,此種可以滿足大多數應用程式;
b、派生預設實現的一個子類,以調整其行為;
c、用介面或者抽象基類的一個新的實現來完全替換該組件;
3)HTML和HTTP上的嚴密控制,ASP.NET MVC會產生整潔與標準相容的標記,其內置的HTML輔助器方法,可以產生與標準相容的輸出。ASP.NET MVC生成的頁面不包含任何ViewState數據,這種對帶寬的節約,可以極大的改善用戶的體驗,並且可以對瀏覽器與伺服器之間傳遞的請求加以控制。
4)可測試性,ASP.NET MVC應用程式不僅可以進行單元測試,還可以與UI自動化測試工具良好協作。
5)強大的路由系統,採用REST風格的路由方案,有如下好處:
a、搜索引擎對URL中找到的關鍵詞有明顯的權重,對同樣的關鍵詞的搜索,極有可能會轉向一個較為簡單的URL地址;
b、許多Web用戶現在對URL有足夠的領悟,並且願意在瀏覽器的地址欄目中輸入URL地址;
c、當理解URL地址的結構後,人們才會更有可能鏈接它,並向其他人共用;
d、此種URL結構並不會將應用程式的技術細節、文件夾、文件名稱等結構暴露給互聯網。對於底層實現可以自由修改,而不會破壞鏈接;
6)建立在ASP.NET平臺之上,一方面ASP.NET MVC是基於.NET平臺的,因此可以靈活的使用任何.NET語言來編寫代碼,可以使用廣泛的.NET類庫和大量的第三方.NET類庫體系;另一方面,已經形成的ASP.NET平臺特性,如認證、成員、角色、配置文件、國際化等可以減少開發和維護Web應用程式所需要的代碼量。
7)ASP.NET MVC是針對.NET 4.X而建立的,因此它的API可以充分利用當前語言和運行時的創新,如await關鍵字、擴展方法、lambda表達式、匿名、動態類型、LINQ。
8)ASP.NET MVC是開源的。
4、ASP.NET MVC與ASP.NET WebForm的比較
首先需要說明的是,雖然ASP.NET MVC相對於ASP.NET WebForm來說有一些優勢,但這並不意味著前者要替代後者,也不意味著後者要消亡。
- WebForm的觀念是,UI應該是狀態化的,其結果是,在HTTP和HTML之上添加一個抽象層,用視圖狀態(ViewState)和回發(Postback)來創建狀態化的效果。這是一種“拖放”式Windows Form風格的開發。
- MVC採納了HTTP真正無狀態的本質。MVC框架要求用戶理解Web應用程式實際的工作方式,在理解的前提下,進行維護和擴展,提供一種功能強大、簡單的、整潔的、現代的方法來編寫Web應用程式,擺脫複雜的限制。
- 所以說,開發小型的,企業內部型應用程式,可以考慮採用WebForm的方式來實現,但更多的時候,開發互聯網應用程式或者大型的應用程式時,MVC無論從效率、相容性、維護性都是一種更好的選擇。
參考資料:《精通ASP.NET MVC X》