免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項超值服

開通VIP
解析ASP.NET WebForm和Mvc開發(fā)的區(qū)別

因?yàn)橐郧爸饕亲鯳ebFrom開發(fā),對MVC開發(fā)并沒有太深入的了解。自從來到創(chuàng)新工場的新團(tuán)隊后,用的技術(shù)都是自己以前沒有接觸過的,比如:MVC 和EF還有就是WCF,壓力一直很大。在很多問題都是不清楚的情況下,問周圍的人,別人也只是給自己講一個大概。而且前兩天因?yàn)閱柫艘粋€比較細(xì)的問題,還被別人的一句話打擊?!拔抑荒芨嬖V你方法,你還指望我手把手的交給你呀,不會你得自己學(xué)呀。。。”。沒辦法只能自己找時間在下面找一些資料學(xué)習(xí)。

在初步了解MVC后,發(fā)現(xiàn)很多人對于MVC和三層架構(gòu)開發(fā)概念上會有很大的混淆,所以把這兩天的學(xué)習(xí)筆記整理一下,分享給自己的同學(xué)們。同時也做一個小Demo,讓沒有接觸過MVC開發(fā)的同學(xué),能對MVC有一個簡單的了解。

一,MVC和三層架構(gòu)的區(qū)別

①什么是三層架構(gòu)?

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

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

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

②什么是MVC呢?

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

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

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

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

①有對數(shù)據(jù)直接訪問的權(quán)利,如:對數(shù)據(jù)庫的訪問;

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

③模型(Model)中數(shù)據(jù)的變化一般會通過一種刷新機(jī)制被“公布”;

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

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

3)控制器(Controller),這個概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用于控制應(yīng)用程序的流程。主要處理事件并作出相應(yīng)?!笆录敝饕ǎ河脩舻男袨楹蛿?shù)據(jù)的改變。

 

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

二,WebForm網(wǎng)站和MVC網(wǎng)站運(yùn)行機(jī)制的區(qū)別

①WebForm網(wǎng)站的運(yùn)行機(jī)制

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

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

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

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

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

到現(xiàn)在的整個過程都還是Http請求,IIS的內(nèi)部機(jī)制會去實(shí)現(xiàn)一個IHttphandler的接口,其中該接口實(shí)現(xiàn)一個ProcessRequestfang方法

MSDN是這樣解釋的

該P(yáng)rocessRequest()方法會去調(diào)用對應(yīng)頁面的Page_Load() 方法

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


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

流程示意圖如下:

②MVC網(wǎng)站的運(yùn)行機(jī)制

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

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

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

3).NET FramWork根據(jù)路由配置,解析URL,并創(chuàng)建FirstPage類的對象,并調(diào)用相應(yīng)的Default方法

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

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

流程的示意圖如下:

這只是一個比較簡單的運(yùn)行過程。其實(shí)在這過程中發(fā)生了很多事情,比如說:執(zhí)行Global.asax中的Application_Start()方法來完成一些初始化的工作等等,會在以后的文章中繼續(xù)解析。

 

以上就是WebForm網(wǎng)站和MVC網(wǎng)站運(yùn)行機(jī)制的區(qū)別。

 

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

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

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

③可以復(fù)用視圖,也就是說同樣的數(shù)據(jù)可以使用不同的視圖以不同的圖標(biāo)展示出來。

 -------------------------------------------------------理論到此結(jié)束---------------------------------------------------------------

常用的WebForm開發(fā)方式就不舉例了,我下邊主要演示一個基本的MVC程序的創(chuàng)建和運(yùn)行過程。

要創(chuàng)建MVC程序VS肯定是必不可少的,我的開發(fā)環(huán)境是VS2013,大家請酌情考慮自己的VS版本。

①首先的打開“文件”→“新建項目”,在左側(cè)的項目欄選擇“Visual C#”→“Web”,在右邊就可以看到有“ASP.NET Web窗體應(yīng)用程序”和“ASP.NET MVC 4 Web應(yīng)用程序”如下圖:

②因?yàn)橐獎?chuàng)建MVC程序就選擇點(diǎn)擊第二個選項然后會看到項目模板,默認(rèn)的是選擇“Internet應(yīng)用程序”,如果選擇默認(rèn)的話,就會默認(rèn)的創(chuàng)建一個具有基本功能的站點(diǎn)。我們這里選擇“基本”,VS只會創(chuàng)建包含基本框架簡的模板

③創(chuàng)建完以后我們會在解決方案下看到代碼的樹狀結(jié)構(gòu),其中包含Models,Views和Controllers三個文件夾

④我們首先創(chuàng)建實(shí)體對象Model,在Models文件夾下創(chuàng)建一個Child類,并聲明屬性和初始化

 1     public class Child 2     { 3         //編號 4         private int id; 5  6          7         public int Id 8         { 9             get { return id; }10             set { id = value; }11         }12 13         //姓名14         private string strName;15 16         public string StrName17         {18             get { return strName; }19             set { strName = value; }20         }21 22     }

⑤在Controllers文件夾上右鍵,“添加”,會看到有“控制器”的選項,如下圖:

點(diǎn)擊"控制器"后會出現(xiàn)一個“添加控制器”窗體,在控制器名稱中”Default1Controller“中”Default1“是默認(rèn)選中的,我們修改其名稱為”HomeController“,

注意:這里的”Default1Controller“中的”*Controller“是必須保留的,主要是因?yàn)镸VC框架有一個”約定大于配置“的規(guī)則

單擊”添加“添加控制器,默認(rèn)生成的控制器代碼,如下:

 1     //默認(rèn)生成的控制器代碼 2     public class HomeController : Controller 3     { 4         // 5         // GET: /Home/ 6  7         //包含一個Action方法 8         public ActionResult Index() 9         {10             //返回給視圖11             return View();12         }13 14     }

⑥然后我們創(chuàng)建一個集合來初始化在Models中創(chuàng)建的Child類的屬性值

 1 #region 初始化數(shù)據(jù)集合 +List InitData() 2         /// <summary> 3         /// 初始化數(shù)據(jù)集合 4         /// </summary> 5         /// <returns></returns> 6         public List<Models.Child> InitData() 7         { 8  9             List<Models.Child> list = new List<Models.Child>()10             {11                 new Child(){Id=1,StrName="你好啊!"},12                 new Child(){Id=2,StrName="不好啊!"}13             };14 15             return list;16         }17 18         #endregion

然后開始編寫Action方法,即”ActionResult Index()“方法,

 1 /// <summary> 2         /// Action方法(相當(dāng)于MVC設(shè)計模式的Model) 3         /// </summary> 4         /// <returns></returns> 5  6         public ActionResult Index() 7         { 8             //可以處理當(dāng)前業(yè)務(wù)(你比如讀取數(shù)據(jù)庫,判斷等) 9             StringBuilder strBuilder = new StringBuilder();10             //創(chuàng)建數(shù)據(jù)集合,獲取數(shù)據(jù)11             List<Models.Child> list = InitData();12             //遍歷集合獲取生成的Html代碼13             list.ForEach(d =>14             {15                 strBuilder.AppendLine("<div>" + d.Id.ToString() + "</div>");16             });17 18             //使用ViewBag傳輸數(shù)據(jù)給同名的Indexcshtml視圖19             //ViewBag是一個dynamic類型的集合,可以動態(tài)添加任意類型的任意名稱和屬性20             ViewBag.HtmlStrBuilder = strBuilder.ToString();21             //加載同名視圖Index.cshtml22             return View();23         }


在其中我們使用ViewBag把數(shù)據(jù)傳輸給同名的Views文件夾下的同名視圖。

⑦創(chuàng)建視圖接收數(shù)據(jù),上面代碼的Index方法上右鍵,會出現(xiàn)”添加視圖“,如下圖

 之后會在Views文件夾下,生成一個Home文件夾,Home文件夾下面會有一個Index.cshtml文件(這個就是視圖文件)

 ⑧視圖接收數(shù)據(jù)

 1 <html> 2 <head> 3     <meta name="viewport" content="width=device-width" /> 4     <title>Index</title> 5 </head> 6 <body> 7     <div> 8        <!---------相當(dāng)于把Action方法中保存的內(nèi)容輸出---------> 9        @Html.Raw( @ViewBag.HtmlStrBuilder)10     </div>11 </body>12 </html>

到這里基本上就完成了一個MVC程序的創(chuàng)建,我們運(yùn)行程序,結(jié)果如下:


注意:因?yàn)镸VC的運(yùn)行機(jī)制跟WebForm不一樣,所以瀏覽的方式也不一樣。我們可以直接在Views文件夾上右鍵,選擇在瀏覽器中查看就可以預(yù)覽到結(jié)果。

-----------------------------------------分割線-------------------------------------------

到這里,關(guān)于ASP.NET WebForm和Mvc開發(fā)的區(qū)別和基本MVC程序的創(chuàng)建過程已經(jīng)完成。

下次我會做的是使用EF(Entity FramWork),來操作數(shù)據(jù)庫(拋開WebForm中的ADO.NET),實(shí)現(xiàn)一個MVC小網(wǎng)站程序的創(chuàng)建。請大家繼續(xù)關(guān)注!

如果在文章中出現(xiàn)錯誤,歡迎大家留言指正。我會虛心接受大家的意見。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ASP.Net MVC開發(fā)基礎(chǔ)學(xué)習(xí)筆記:一、走向MVC模式
什么是MVC
[ASP.NET MVC2 系列] ASP.Net MVC教程之《在15分鐘內(nèi)用ASP.Net MVC創(chuàng)建一個電影數(shù)據(jù)庫應(yīng)用程序》
Joomla MVC 組件開發(fā) (5)
ASP.NET MVC 入門介紹 (上)
MVC模式已死?何不試試MOVE
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服