1. 程式人生 > >MVC學習系列-WebForm與asp.net MVC兩種設計模式區別、MVC設計模式基礎瞭解

MVC學習系列-WebForm與asp.net MVC兩種設計模式區別、MVC設計模式基礎瞭解

ASP.NET 是一個開發框架,用於通過 HTML、CSS、JavaScript 以及伺服器指令碼來構建網頁和網站。ASP.NET 支援三種開發模式:Web Pages、MVC (Model View Controller) 以及 WebForm。下面首先區別比較一下WebForm 和MVC兩種設計模式,接著進行MVC基礎知識的講解。

一、兩種設計模式的區別

1.WebFrom 設計模式

WebFrom 設計模式也稱為事件驅動模式,它常見的開發方式有兩種

(1)aspx前端頁面+伺服器控制元件(為控制元件設定事件響應方法)

此種開發方式將網站分為前後臺,前臺頁面通過 HTML、CSS、JavaScript 以及伺服器指令碼構建網頁,為aspx檔案;後臺程式碼為aspx.cs檔案,是對應於我們前臺頁面的程式碼,兩者之間存在繼承關係,前臺頁面繼承自後臺頁面(由此可知兩者之間的耦合性比較強,不利於後期軟體變更、維護)。下面的程式碼截圖即說明了這個問題。


此種開發方式有一個特殊的事件響應模型,拖拉一個伺服器控制元件到設計器中,雙擊該控制元件就會為該控制元件新增事件程式碼。是不是很方便,如果你是一個新手,你可能會很“感激”微軟,畢竟他為我們節省了很多的工作。是的,微軟為我們做了大量工作。但方便的同時就是很多底層程式碼的透明,我們並不知道原理。微軟不開源,多麼坑人啊!作為Web開發,請求、處理、響應是基本的流程,可是用此種開發方式開發的網站,使用者請求的都是頁面,處理的還是頁面的後臺程式碼,響應的還是頁面。一切就是以UI為核心,不管其他人有沒有意識到,我感覺此種開發方式有點背離了Web開發。

(2)html靜態頁面+非同步+ashx一般處理程式

個人感覺此種開發方式較上面一種先進了一些,效率可能更高些。

<1>  html靜態頁面請求不需要走頁面的生命週期

<2>  執行一般處理程式也不需要走頁面生命週期

<3>  非同步請求可以在不更新整個頁面的情況下更新頁面部分內容

但是,也有缺點,那就是開發效率不高。你想啊,每個請求都要一個一般處理程式來處理,這得需要多少個一般處理程式啊。而且,如果替換頁面部分內容的時候可能還要把整個頁面內容載入到一般處理程式內部,替換之後再發送到響應報文中,效率肯定高不到那去。

2.MVC設計模式

在開始學習MVC模式之前,我們需要了解兩個東西: (1)MVC的出現不是為了替代WebForm而出現的,其實,MVC也只是Web開發的另一種方式而已,兩者是可以共存的。 (2)MVC是一種表現層的設計模式,也就是說他是用在UI層的。

MVC設計模式的實現方式是將前臺的呈現與後臺的控制分離開來(較WebForm有了改進,極大降低了前臺和後臺的耦合性,有利於後期軟體變更、維護),這也是微軟力薦軟體開發人員使用的開發方式。

MVC設計模式主要包含三個部分:Controller、View、Model  下面為大家詳細講解一下

Controller:控制器類繼承自ControllerBase基類。 在Contrller資料夾下新增的以Controller結尾的類就是控制器,它的每個方法就是一個Action。它的職責主要有三部分:

(1)處理請求

(2)呼叫業務邏輯層程式碼,執行業務邏輯

(3)根據業務邏輯層返回的資料封裝Model,將Model交給具體的VIew

Controller是個指揮家的角色,它並不控制View的顯示邏輯,只是將Model的資料交給View,而具體的怎樣展示資料那是View的職責,所以Controller跟View是一個弱耦合的狀態。而Controller可以任意指定具體的View進行渲染(所謂的換衣服),達到了UI層的程式碼和實體良好的分離。

View:頁面類繼承自ViewPage類,而ViewPage類又繼承自Page類。這也再次說明了Controller和View並沒有什麼繼承上的關係。View只是負責展示從Controller拿來的資料,具體如何展示也是它自己的事。而View層程式碼的書寫又直接跟檢視引擎解析的規則有關(在為Action新增檢視時會有一個選項,是選擇Razor還是aspx)。

Model:對於MVC來說,Model可不簡單只是實體,它應該叫檢視模型。為什麼要成為檢視模型呢?和檢視相關?不錯,他就是用來提供給檢視,作為檢視的資料來源(不知道這麼說準確不準確),展示頁面用的。還有,不要把Model和Entity相混滌了,Entity是指與資料庫對應的實體類,它與資料表一一對應,它可以通過一些程式碼生成器和entity framework生成工具和生成。


3.兩者設計模式比較

MVC是微軟對外公佈的第一個開源的表示層框架,MVC目的不是取代WebForm開發,只是web開發的另一種選擇。兩者最本質區別是請求url不同,MVC是將請求交給控制器處理,而WebForm是將請求交給請求頁的後臺檔案(.cs檔案的Page_Load)處理。

WebForm優點:

1. 支援事件模型開發。有豐富的伺服器端元件。
2. 控制元件豐富

WebForm缺點:

   1.檢視狀態負荷過大:跨請求狀態維護的機制(Viewstate),導致在客戶端與瀏覽器之間傳輸大片冗餘資料。這種資料即使在最合適的Web應用程式中也到達幾百Kb,而且他來回於每次請求之間,導致網站響應較慢,令網站訪問者十分不爽。
   2.頁面生命週期:每次請求aspx頁面都要走複雜的生命週期,效能不高,而且具體如何執行我們也不是很清楚(希望微軟早點開源)
   3.html受限:伺服器端控制元件層將自己渲染成HTML,但有時候會誕生不可預知的Id值。這些Id值不能用於JavaScript。而且過度的封裝,試圖隱藏http協議的無狀態。這種封裝對於深入理解HTTP協議的人來說始終莫大的障礙。

MVC優點:

1. 很容易將複雜的應用分成M、V、C三個元件模型,通過model、view、controller有效的簡化了複雜的架構,將處理後臺邏輯程式碼與前臺展示邏輯進行了很好的分離。
2. 因為沒有使用server-based forms,所以程式設計師控制的會更加靈活,頁面更加乾淨,沒有viewstate。
3. 通過修改路由規則,可以控制生成自定義的url,因此控制生成seo友好的url將更加容易。
4. 強型別view實現,更安全,更高效。

4.程式的除錯

WebFrom:當我們除錯程式時請求的Url是具體的頁面,我們可以進行起始頁之類的設定

MVC:當我們除錯程式時請求的Url是某個控制器下面的具體的Action,可以通過修改預設路由進行設定

WebForm、MVC這兩種設計模式的比較到此結束,也許兩者之間還有其他的區別,由於本人也是初學,對此不是很清楚,以後再補充

二、MVC設計模式基礎知識

關於MVC設計模式中M、V、C上面已經都介紹過了,下面我們來劃一下MVC總的業務流程。

MVC 設計模式總的業務流程如下圖所示:

                           

從上面的處理模型可以看出 使用者請求的是一個控制器下面的具體的Action。客戶端傳送一個Http請求,首先被我們的IIS捕獲到,然後根據Url請求的格式,最終交給我們的Route元件,然後它負責解析出我們的Url具體請求的是哪個Controller下的哪個Action。然後MVC經過處理呼叫我們的Action執行。在Action中我們一般會從業務的Model層取出資料然後將傳輸層的資料轉換成ViewModel再交給View的檢視引擎渲染,將最終生成Html的位元組流寫回客戶端。

Routing的作用:獲取到View傳過來的Url請求,並解析Url請求中Controller和Action以及資料,然後將識別出來的資料傳遞給Controller的Action(Controller的方法)。

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters// 設定Url的格式,我們也可以自定義
                new { controller = "Ajax", action = "Index", id = UrlParameter.Optional } // Parameter defaults //預設請求的是Ajax控制器下面的Index方法
            ); //也可以根據需要修改
        }

下面的文章會接著講解路由等知識點,希望大家能繼續關注並給與指導性意見。