MVC模式及原理


MVC(Model-View-Controller,模型—視圖—控制器模式)用於表示一種軟件架構模式。它把軟件系統分為三個基本部分:模型(Model),視圖(View)和控制器(Controller)。

那么MVC模式和我們熟悉的WebForm模式有什么不同呢?他的各個部分又是怎樣分工的呢?

我們先來看一下普通的WebForm模式下,我們請求一個例如http://www.51mvc.com/blog/index.aspx的URL,那么我們的WebForm程序會到網站根目錄下去尋找blog目錄下的index.aspx文件,然后由index.aspx頁面的CodeBehind文件(.CS文件)進行邏輯處理,其中或許也包括到數據庫去取出數據(其中的經過怎樣的BLL到DAL這里就不談了),然后再由index.aspx頁面來呈現給用戶。簡單的示意圖如下所示:

image

也就是一個URL請求的是在服務器與該URL對應路徑上的物理文件(ASPX文件或其他),然后由該文件來處理這個請求並返回結果給客戶端。

但是,對於MVC模式,這是怎樣的一個過程呢?

我們先來建一個ASP.NET MVC的項目吧。VS2008默認是沒有ASP.NET MVC的項目模板的,首先我們需要到http://www.microsoft.com/downloads/details.aspx?FamilyId=A24D1E00-CD35-4F66-BAA0-2362BDDE0766&displaylang=en去下載最新的ASP.NET MVC的安裝程序,目前最新版本的Microsoft ASP.NET MVC Beta(10/15/2008)。下載安裝完后,我們可以在新建項目那里找到ASP.NET MVC的項目:

 
注:如果你的是中文版的VS,安裝完后可能會出現找不到這個模板的現象,你可以參考在中文版VS 08中安裝MVC這篇文章設置一下。

建立一個ASP.NET MVC項目后,默認的項目大概如下圖:

image

我們可以看到項目中有幾個文件夾的命名和MVC(Model-View-Controller,模型—視圖—控制器模式)是對應的。然后我們運行一下項目看看:

image

我們注意到地址欄的URL是 Home/Index,如果按照我們前面說的WebForm的模式的話,我們應該可以在我們的項目的根目錄下找到Home目錄,然后Home目錄下有個Index的文件,但是我們並不能在根目錄下找到Home這個目錄。不過還是讓我們在Views目錄下找到了Views/Home/Index.aspx文件,我們輸入這個地址運行看看:

image

Oh,No!路徑是對的,文件也存在,但為什么會是404,說找不到文件呢?如果不是直接訪問存在的物理文件,那么MVC又是怎樣工作的呢?

原來啊,MVC模式的工作過程是這樣的:

image

在MVC中,客戶端的所請求的URL是被映射到相應的Controller去,然后由Controller來處理業務邏輯,或許要從Model中取數據,然后再由Controller選擇合適的View返回給客戶端。再說回前面我們運行的ASP.NET MVC程序訪問的http://localhost:2176/Home/Index這個URL,它訪問的其實是HomeController中的Index這個Action,見下圖:

image

其中public ActionResult Index()這個方法稱為Controller的Action,他返回的是ActionResult的類型。一個Controller可以有很多個Action。

那么一個URL是怎樣被定位到Controller中來的呢?我們先來看一下web.config文件,在web.config文件的httpModules配置節中,我們可以看到一個UrlRoutingModule:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM