標籤:blog http os 使用 io strong 檔案 for ar
因為以前主要是做WebFrom開發,對MVC開發並沒有太深入的瞭解。自從來到創新工場的新團隊後,用的技術都是自己以前沒有接觸過的,比如:MVC 和EF還有就是WCF,壓力一直很大。在很多問題都是不清楚的情況下,問周圍的人,別人也只是給自己講一個大概。而且前兩天因為問了一個比較細的問題,還被別人的一句話打擊。“我只能告訴你方法,你還指望我手把手的交給你呀,不會你得自己學呀。。。”。沒辦法只能自己找時間在下面找一些資料學習。
在初步瞭解MVC後,發現很多人對於MVC和三層架構開發概念上會有很大的混淆,所以把這兩天的學習筆記整理一下,分享給自己的同學們。同時也做一個小Demo,讓沒有接觸過MVC開發的同學,能對MVC有一個簡單的瞭解。
一,MVC和三層架構的區別
①什麼是三層架構?
在學校的時候,和同學或者老師一起討論MVC的時候,別人可能會說,“不就是三層架構嘛!實體層(Model),用來建立對象的實體;商務邏輯層(BLL),用來處理複雜的資料間的關係或者是業務間的關係;資料庫訪問層(DAL),用來用來訪問資料庫的;當然還會有,View(視圖層),用來展示資料;”其實自己雖然知道不是這樣,但是自己也僅僅是瞭解一點點,也解釋不清楚,所以也就算了。(具體的三層架構之間的操作的關係可以看我以前的部落格【ASP.NET開發】.NET三層架構簡單解析)。
它們之間互相操作的關係,基本的如下:
還記的暑假在鄭州找實習工作的時候,被別人問過一個n層架構的概念,當時就懵了,尼瑪的壓根就沒聽說過啊!不過後來查詢資料知道,所謂的n曾架構就是根據系統的需要把商務邏輯層(BLL)或者資料庫訪問層(DAL)再抽象成幾個層次(具體的就是再抽象成類),便於邏輯的處理和代碼模組的維護。其基本原理還是基於三層架構。
②什麼是MVC呢?
MVC其實是軟體架構的一種模式,也就是我們經常說的設計模式。其中主要包括三個模組,就是如MVC名字所顯示的那樣:模型(Model),視圖(View),控制器(Controller);
其中這裡的模型(Model)和視圖(View )是完全區別於三層架構中的模型(Model)和視圖(View)的。
1)MVC中的模型(Model)指的是資料模型,用於封裝與應用程式的商務邏輯相關的資料,除此之外還可以封裝資料的處理方法(相當於商務邏輯)。這是完全區別於三層架構的模型層(Model)的。
MVC中模型(Model)的特點:
①有對資料直接存取的權利,如:對資料庫的訪問;
②模型(Model)“不依賴”視圖(View)和控制器(Controller),即模型(Model)不關心它會被如何顯示或者如何被操作;
③模型(Model)中資料的變化一般會通過一種重新整理機制被“公布”;
④為了實現③中的“機制”用於監視此模型的視圖必須事先在此模型上註冊。從而,視圖可以瞭解在資料模型上發生的改變。
2)視圖(View),這裡的視圖基本跟三層中的視圖一樣,都是為了顯示資料,沒有程式上的邏輯。為了實現視圖上資料的重新整理,視圖(View)需要訪問它監視的模型(Model),所以應該事先在被它監視的資料那裡進行註冊。
3)控制器(Controller),這個概念是在三層中不存在的概念。它主要起到不同層面的組織作用,用於控制應用程式的流程。主要處理事件並作出相應。“事件”主要包括:使用者的行為和資料的改變。
以上就是關於三層架構和MVC在概念上的區別。
二,WebForm網站和MVC網站運行機制的區別
①WebForm網站的運行機制
比如說我們現在要訪問一個WebForm網站:www.google.com.hk/Default.aspx(僅僅是樣本)。我們的瀏覽器和伺服器都是做了哪些動作呢?
1)首先瀏覽器會向目的伺服器發送請求報文。
配置過IIS的都知道,網站掛載在伺服器上,我們是通過訪問虛擬目錄的方式訪問網站的。這時候目的主機的IIS接收的是訪問該虛擬目錄下Default.aspx檔案的請求;(當然這也是一個非常複雜的過程,包括請求DNS伺服器,找到目的主機IP,根據IP地址訪問目的主機。複雜的網路過程就不敘述,有興趣的自己找資料學習);
2)伺服器端的IIS軟體接收到請求後,把請求交給.NET FramWork進行處理;
3).NET FramWork會建立Default_aspx類的對象,也就是我們所說的頁面對象。(在WebFrom網站建立完,並且編譯後Default.aspx會被編譯成Default_aspx類)
到現在的整個過程都還是Http請求,IIS的內部機制會去實現一個IHttphandler的介面,其中該介面實現一個ProcessRequestfang方法
MSDN是這樣解釋的
該ProcessRequest()方法會去調用對應頁面的Page_Load() 方法
1 protected void Page_Load(object sender, EventArgs e)2 {3 //處理的商務邏輯或者是訪問資料庫的代碼4 //要輸出的Html或者其它內容5 }
4)返回給瀏覽器(包括Html,CSS,Js等等)
流程如下:
②MVC網站的運行機制
還比如說我們現在要訪問一個MVC網站:www.google.com.hk/FirstPage/Default(僅僅是樣本)。我們的瀏覽器和伺服器又做了哪些動作呢?
1)瀏覽器向伺服器發送Request請求報文(FirstPage/Default)
2)伺服器端的IIS相應Request請求
3).NET FramWork根據路由配置,解析URL,並建立FirstPage類的對象,並調用相應的Default方法
1 public ActionResult Default()2 {3 4 return View();//返回給視圖5 }
4)然後會訪問視圖檔案夾下的Default.cshtml,返回給瀏覽器(其中包括html,css,js等等)
流程的如下:
這隻是一個比較簡單的運行過程。其實在這過程中發生了很多事情,比如說:執行Global.asax中的Application_Start()方法來完成一些初始化的工作等等,會在以後的文章中繼續解析。
以上就是WebForm網站和MVC網站運行機制的區別。
那麼到底使用MVC的優點比WebForm到底有哪些優點呢?
①最重要的就是.NET程式員在開發的時候再也不會使用那些被很多人詬病的微軟封裝的控制項了。
②MVC設計模式降低了模型(Model,業務和資料)和視圖的耦合關係。包括我們在開發WebForm網站使用三層架構的思想也是為了降低資料和視圖的耦合等;
③可以複用視圖,也就是說同樣的資料可以使用不同的視圖以不同的表徵圖展示出來。
解析ASP.NET WebForm和Mvc開發的區別