ASP.NET MVC與ASP.NET WebForm

     ASP.NET MVC是微軟公司的一款WEB開發框架,整合了「模型-視圖-控制器」架構的高效與整潔,是敏捷開發最現代的思想與技術。它是傳統ASP.NET WebForm的一個完善的替代品。瀏覽器

一、當今的Web開發服務器

     1)REST(Representational State Transfer)已經成爲應用程序在HTTP上互操做的主要體系架構,徹底使SOAP失色。REST是根據表示真實世界實體的資源(URI)和表示在這些資源上可用的標準操做方法(HTTP方法)來描述一個應用程序。經過HTTP方法與資源地址的組合就能夠對資源執行相應的操做,這種組合就是REST,執行這種操做的請求也稱爲REST化的請求。(對於REST的理解我的仍是不透徹,後面會對此概念進行補充架構

當前的Web應用程序不僅是提供HTML服務,一般也須要將XML或JSON數據提供給用戶,而WebForm很難支持。app

     2)整個軟件行業向着敏捷與測試驅動開發方向的發展,如單元測試工具(NUnit、xUnit)、模仿框架(Moq、Rhino、Mocks)、控制反轉容器(Ninject、AutoFac)、持續集成服務器(CruiseControl、TeamCity)、對象關係映射器(NHibernate、Subsonic、EF、Dapper、Petapoco)、UI自動化工具的提供。(測試驅動開發TDD思想:首先描述想要獲得的行爲範例,稱爲測試規範;而後進行軟件設計,這樣經過執行依附於這一實現的一套測試,來驗證應用程序的穩定性和正確性框架

     3)順應Web標準和REST化的趨勢。工具

二、ASP.NET WebForm的歷史與問題單元測試

     ASP.NET WebForm的技術堆棧,以下圖所示:測試

    

     此圖的含義是WebForm創建在ASP.NET之上,而ASP.NET又創建在.NET平臺之上,MVC框架所起的做用是替代WebForm。ui

     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的這種緊耦合體系結構並不適合於單元測試,對於集成測試也很具備挑戰性;

三、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是開源的。

四、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》

相關文章
相關標籤/搜索