亚洲中文无码成人网,中文字幕日韩人妻在线乱码,亚洲精品久久久久中文第一幕,无码精品日韩专区第一页,日韩福利午夜无码免费

ASP.NETWebForm和Mvc的區別

時(shí)間:2017-06-30點(diǎn)擊量: (2205 次)來(lái)源: 1裝科技

1個(gè)10多年的老程序員還不知道ASP.NET WebForm和Mvc的區別?,下面我們來(lái)講講他們的區別

一,MVC和三層架構的區別

①什么是三層架構?

在學(xué)校的時(shí)候,和同學(xué)或者老師一起討論MVC的時(shí)候,別人可能會(huì )說(shuō),“不就是三層架構嘛!實(shí)體層(Model),用來(lái)創(chuàng )建對象的實(shí)體;業(yè)務(wù)邏輯層(BLL),用來(lái)處理復雜的數據間的關(guān)系或者是業(yè)務(wù)間的關(guān)系;數據庫訪(fǎng)問(wèn)層(DAL),用來(lái)用來(lái)訪(fǎng)問(wèn)數據庫的;當然還會(huì )有,View(視圖層),用來(lái)展示數據;”其實(shí)自己雖然知道不是這樣,但是自己也僅僅是了解一點(diǎn)點(diǎn),也解釋不清楚,所以也就算了。(具體的三層架構之間的操作的關(guān)系可以看我以前的博客【ASP.NET開(kāi)發(fā)】.NET三層架構簡(jiǎn)單解析)。

它們之間互相操作的關(guān)系,基本的示意圖如下:


還記的暑假在鄭州找實(shí)習工作的時(shí)候,被別人問(wèn)過(guò)一個(gè)n層架構的概念,當時(shí)就懵了,尼瑪的壓根就沒(méi)聽(tīng)說(shuō)過(guò)??!不過(guò)后來(lái)查詢(xún)資料知道,所謂的n曾架構就是根據系統的需要把業(yè)務(wù)邏輯層(BLL)或者數據庫訪(fǎng)問(wèn)層(DAL)再抽象成幾個(gè)層次(具體的就是再抽象成類(lèi)),便于邏輯的處理和代碼模塊的維護。其基本原理還是基于三層架構。

②什么是MVC呢?

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

其中這里的模型(Model)和視圖(View )是完全區別于三層架構中的模型(Model)和視圖(View)的。

1)MVC中的模型(Model)指的是數據模型,用于封裝與應用程序的業(yè)務(wù)邏輯相關(guān)的數據,除此之外還可以封裝數據的處理方法(相當于業(yè)務(wù)邏輯)。這是完全區別于三層架構的模型層(Model)的。

MVC中模型(Model)的特點(diǎn):

①有對數據直接訪(fǎng)問(wèn)的權利,如:對數據庫的訪(fǎng)問(wèn);

②模型(Model)“不依賴(lài)”視圖(View)和控制器(Controller),即模型(Model)不關(guān)心它會(huì )被如何顯示或者如何被操作;

③模型(Model)中數據的變化一般會(huì )通過(guò)一種刷新機制被“公布”;

④為了實(shí)現③中的“機制”用于監視此模型的視圖必須事先在此模型上注冊。從而,視圖可以了解在數據模型上發(fā)生的改變。

2)視圖(View),這里的視圖基本跟三層中的視圖一樣,都是為了顯示數據,沒(méi)有程序上的邏輯。為了實(shí)現視圖上數據的刷新,視圖(View)需要訪(fǎng)問(wèn)它監視的模型(Model),所以應該事先在被它監視的數據那里進(jìn)行注冊。

3)控制器(Controller),這個(gè)概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應用程序的流程。主要處理事件并作出相應?!笆录敝饕ǎ河脩?hù)的行為和數據的改變。

 

以上就是關(guān)于三層架構和MVC在概念上的區別。

二,WebForm網(wǎng)站和MVC網(wǎng)站運行機制的區別

①WebForm網(wǎng)站的運行機制

比如說(shuō)我們現在要訪(fǎng)問(wèn)一個(gè)WebForm站點(diǎn):www.google.com.hk/Default.aspx(僅僅是示例)。我們的瀏覽器和服務(wù)器都是做了哪些動(dòng)作呢?

1)首先瀏覽器會(huì )向目的服務(wù)器發(fā)送請求報文。

配置過(guò)IIS的都知道,網(wǎng)站掛載在服務(wù)器上,我們是通過(guò)訪(fǎng)問(wèn)虛擬目錄的方式訪(fǎng)問(wèn)網(wǎng)站的。這時(shí)候目的主機的IIS接收的是訪(fǎng)問(wèn)該虛擬目錄下Default.aspx文件的請求;(當然這也是一個(gè)非常復雜的過(guò)程,包括請求DNS服務(wù)器,找到目的主機IP,根據IP地址訪(fǎng)問(wèn)目的主機。復雜的網(wǎng)絡(luò )過(guò)程就不敘述,有興趣的自己找資料學(xué)習);

2)服務(wù)器端的IIS軟件接收到請求后,把請求交給.NET FramWork進(jìn)行處理;

3).NET FramWork會(huì )創(chuàng )建Default_aspx類(lèi)的對象,也就是我們所說(shuō)的頁(yè)面對象。(在WebFrom網(wǎng)站創(chuàng )建完,并且編譯后Default.aspx會(huì )被編譯成Default_aspx類(lèi))

到現在的整個(gè)過(guò)程都還是Http請求,IIS的內部機制會(huì )去實(shí)現一個(gè)IHttphandler的接口,其中該接口實(shí)現一個(gè)ProcessRequestfang方法

MSDN是這樣解釋的

blob.png

該ProcessRequest()方法會(huì )去調用對應頁(yè)面的Page_Load() 方法

1 protected void Page_Load(object sender, EventArgs e)2         {3             //處理的業(yè)務(wù)邏輯或者是訪(fǎng)問(wèn)數據庫的代碼4             //要輸出的Html或者其它內容5         }


4)返回給瀏覽器(包括Html,CSS,Js等等)

流程示意圖如下:

blob.png

②MVC網(wǎng)站的運行機制

 還比如說(shuō)我們現在要訪(fǎng)問(wèn)一個(gè)MVC站點(diǎn):www.google.com.hk/FirstPage/Default(僅僅是示例)。我們的瀏覽器和服務(wù)器又做了哪些動(dòng)作呢?

1)瀏覽器向服務(wù)器發(fā)送Request請求報文(FirstPage/Default)

2)服務(wù)器端的IIS相應Request請求

3).NET FramWork根據路由配置,解析URL,并創(chuàng )建FirstPage類(lèi)的對象,并調用相應的Default方法

1 public ActionResult Default()2         {3 4                 return View();//返回給視圖5         }

4)然后會(huì )訪(fǎng)問(wèn)視圖文件夾下的Default.cshtml,返回給瀏覽器(其中包括html,css,js等等)

流程的示意圖如下:

blob.png

這只是一個(gè)比較簡(jiǎn)單的運行過(guò)程。其實(shí)在這過(guò)程中發(fā)生了很多事情,比如說(shuō):執行Global.asax中的Application_Start()方法來(lái)完成一些初始化的工作等等,會(huì )在以后的文章中繼續解析。

 

以上就是WebForm網(wǎng)站和MVC網(wǎng)站運行機制的區別。

 

那么到底使用MVC的優(yōu)點(diǎn)比WebForm到底有哪些優(yōu)點(diǎn)呢?

①重要的就是.NET程序員在開(kāi)發(fā)的時(shí)候再也不會(huì )使用那些被很多人詬病的微軟封裝的控件了。

②MVC設計模式降低了模型(Model,業(yè)務(wù)和數據)和視圖的耦合關(guān)系。包括我們在開(kāi)發(fā)WebForm網(wǎng)站使用三層架構的思想也是為了降低數據和視圖的耦合等;

③可以復用視圖,也就是說(shuō)同樣的數據可以使用不同的視圖以不同的圖標展示出來(lái)。





掃碼試用

咨詢(xún)熱線(xiàn)(同微信)
180 3082 2702
181 1780 2747

掃碼微信咨詢(xún)

亚洲中文无码成人网,中文字幕日韩人妻在线乱码,亚洲精品久久久久中文第一幕,无码精品日韩专区第一页,日韩福利午夜无码免费