爲什麼MVC比Webform更好一些?

為什麼MVC比Webform更好一些?

MVC與WebForm的區別

  • 什麼是MVC?
為什麼MVC比Webform更好一些?

MVC其實就是一種軟件架構模式,也就是我們經常說的設計模式。其中主要包括三個模塊,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);

  • 什麼是WebForm
為什麼MVC比Webform更好一些?

ASP.NETWebform提供了一個類似於Winform的事件響應GUI模型(event-drivenGUI),隱藏了HTTP、HTML、JavaScript等細節,將用戶界面構建成一個服務器端的樹結構控件(Control),每個控件通過ViewState保持自己的狀態,並自動把客戶端的js事件和服務器端的事件聯繫起來。這種做法使得開發WinForm和WebForm程序具有相近的開發體驗,填平WinForm開發(有狀態、面向對象的)和WebForm開發(無狀態、面向HTML的)之間的鴻溝;

  • WebForm網站和MVC網站運行機制的區別

WebForm網站:

  1. 首先瀏覽器會向目的服務器發送請求報文;配置過IIS的都知道,網站掛載在服務器上,我們是通過訪問虛擬目錄的方式訪問網站的。這時候目的主機的IIS接收的是訪問該虛擬目錄下Default.aspx文件的請求;
  2. 服務器端的IIS軟件接收到請求後,把請求交給.NET FramWork進行處理;
  3. .NET FramWork會創建Default_aspx類的對象,也就是我們所說的頁面對象;
  4. 返回給瀏覽器;

MVC網站:

  1. 瀏覽器向服務器發送Request請求報文;
  2. 服務器端的IIS相應Request請求;
  3. .NET FramWork根據路由配置,解析URL,並創建FirstPage類的對象,並調用相應的Default方法;
  4. 然後會訪問視圖文件夾下的Default.cshtml,返回給瀏覽器(其中包括html,css,js等等);
為什麼MVC比Webform更好一些?

Webform的優缺點

  • WebForm 優點

1、支持事件模型開發。得益於豐富的服務器端組件,webfrom開發可以迅速的搭建web應用;

2、使用方便,入門容易;

3、控件豐富;

  • WebFrom 缺點

1、封裝太強,很多底層東西讓我們初學者不是很明白;

2、入門容易,提升很難;

3、複雜的生命週期模型學習起來並不容易;

4、控制不靈活;

5、ViewState處理;

MVC的優缺點

  • MVC優點

1、很容易將複雜的應用分成M、V、C三個組件模型。通過model、view和controller有效的簡化了複雜的架構,體現了很好的隔離原則;

2、因為沒有使用server-based forms 。所以我們程序員控 制的更加靈活,頁面加乾淨;

3、可以控制生成自定義的url。對於seo友好的url更是不在話下;

4、強類型View實現,更安全、更可靠、更高效;

5、讓web開發可以專注於某一層,有利於開發中的分工,更利於分工配合適用於大型架構開發;

6、很多企業已經使用MVC作為項目開發框架,招聘明確要求熟悉MVC開發模式,我現在做的項目架構就是mvc+ef+wcf+…

7、松耦合、易於擴展和維護;

8、有利於組件的重用;

9、ASP.NET MVC更好的支持單元測試;

10、在團隊開發模式下表現更出眾,MVC 代碼和頁面徹底分離,WebForm:codebehind技術沒有完全對代碼和前臺頁面進行分離;

  • MVC缺點

需要有一定的html、css、js、jquery前端技術,也就增加了一些學習的成本;

MVC比Webform對比

為什麼MVC比Webform更好一些?

MVC更加有利於理解分層邏輯,把握代碼的層次感,Controller到aspx頁面之間的過程已經被框架隔離;至於Controller或者View頁面與Model調用的過程,還是需要自己來把握;ASP.NET的MVC框架實現了Controller代碼的單獨管理。

WebForm則只在HttpHandler容器中執行,對其進行分層,在大的方面缺乏支持,而只能依靠邏輯上分離,並不是不能分離,而是有一定的侷限性;HttpHandler的攔截,是跟訪問後綴名有關的,當請求一個頁面時,那就是一個Handler,而WebForm模型實現顯示與邏輯分離,才有的是WinForm的事件驅動,顯然,事件必須被註冊到頁面裡,比如Button1_Click這樣的代碼,而在Button1_Click執行之前,Page_Load方法會被執行;顯示代碼被寫入Page_Load方法中,那麼就會造成需要寫額外的廢代碼,比如if (!Page.IsPostBack)這樣的判定,而在Button1_Click執行後需要顯示的部分,則比較難處理,寫出另一個方法,也是必須要在Button1_Click裡調用的,替代的解決方案是使用Response.Redirect,在一個aspx頁面中處理邏輯,處理完就跳轉到另外一個顯示的頁面;這樣做的壞處是,在兩個頁面中數據很難共享,而跳轉是通過標記302來實現,因此多一次請求;而另外還可以通過Server.Execute,Server.Transfer或者Context.RewritePath這樣的處理方式,則兩個頁面轉換是在服務器端完成,可以共享數據,可以說和MVC框架的處理方式大同小異,缺點是需要手動配置這些重新定向的屬性。

為什麼MVC比Webform更好一些?

總結

MVC框架具有很強的優越性,而WebForm也不是一無是處,在簡單的應用中更加容易開發。WebForm也是可以實現和MVC一樣的分層方式,只是處理時需要多寫一些代碼而已。而我認為,在用WebForm開發分層遇到的最大問題是頁面與頁面之間數據的傳遞問題,而掌握好WebForm中使用服務器端跳轉的應用技巧進行開發就可以解決數據傳輸問題,ASP.NET MVC與WebForm比較起來,WebForm更容易理解,不會產生複雜的配置,也是一個很不錯的選擇。


分享到:


相關文章: