方配.NET是基于MVC的架構,在引入MVC之前,我們來對Web從請求到響應的過程進行抽象:一個Web請求的全過程實際就是一個簡單的輸入和輸出, 輸入是Request包含的頭信息、Cookie、表單數據等信息,輸出是最后的HTML。這就好比放進去面粉,最后出來的是做好的饅頭。但是從面粉變成饅頭卻要經歷很多工序,這一道一道的工序,就組成了整個流程。
### 1、為什么使用MVC?
在ASP.NET開發中,一般情況下,網站的前臺程序不使用.NET控件模式,性能都得到了提升。.NET控件的開發方式比較有利于提高開發效率,提高模塊的重用性,但缺陷是性能上會有一些損失,例如不用數據綁定,顯然也就不必判斷數據來源和轉換數據類型,不用頁面控件和控件事件等,也就避免了使用ViewState,此外.NET控件往往追求功能齊全,當你只需要一部分功能時,大量無用的代碼同樣會拖累性能。

這張圖會讓您更直觀地知道為什么MVC比WebForm好。 ASP.NET WebForm和ASP.NET MVC,很多開發者認為ASP.NET不同于MVC,事實上,MVC是一種架構模式,ASP.NET是一個開發框架。我們必須明確的是ASP.NET MVC是ASP.NET 技術的一個子集。ASP.NET MVC技術是ASP.NET技術和MVC模式的完美結合。

#### 1.1、ASP.NET WebForm Behind Code的好處和存在的問題
ASP.NET WebForm是一個快速可視化的Web程序開發技術。也就是說,開發者簡單地拖拽控件到窗體設計器上,VS就會在Behind Code(aspx.cs文件)生成代碼。目的是使得開發者能夠將精力集中在系統的業務邏輯處理中而非UI界面開發上。

換句話說,你向設計器中拖放一個Button按鈕后,便可以在它的事件處理程序中編寫代碼了。


Behind Code文件就是開發者能夠快速開發WebForm程序的關鍵,因為它封裝了底層復雜的技術過程,如Event、Delegates、HTTP協議Post、Get以及Session管理等等,但正是Behind Code的工作方式給開發Web程序帶來了很多嚴重問題。
Web網站最終是給終端用戶使用的,終端用戶帶著特定的目的去訪問一個網站,然后他們使用一些“行為動作”,如輸入URL、點擊提交按鈕等等,來表達他們想要干什么。比如一個人去購物網站購物,那么他會通過類似點擊購買按鈕、右鍵或者在瀏覽器地址欄中輸入URL 等行為來完成。正是因為以上這些行為的構成特點,所以Web程序選擇使用HTTP協議,因為該協議包含了許多與之相似的動作諸如POST、GET、PUT以及DELETE等等,這些恰恰能更形象地表達終端用戶的意圖。這樣很自然地,我們要是能夠把用戶的這些行為一一映射到我們程序方法上,這不僅會更有意義還會使項目架構更加清晰明了。
但是,WebForm無法這樣去做。因為微軟一直想推廣WebForm的“可視化編程”的概念,所以最終選擇了一個“基于視圖”的解決方案去應對“基于行為”的需求。

如上圖所示,用戶的“請求過程”呈現出一個古怪的路線。
* 終端用戶通過POST/GET方式發送一個Request請求
* IIS服務器將該請求轉到對應的視圖(Page頁面)
* 視圖初始化一個頁面,開始頁面生命周期,激發對應事件(如Page.Load),最終處理終端用戶的行為(三層架構中,就是調用業務邏輯層、數據訪問層進行處理)
* 最終服務器將結果以HTML的形式Response給終端用戶的瀏覽器
如上,微軟搞出了一個“基于視圖”的架構方案去應付一個“基于行為”的需求。換句話說,如果一個終端用戶發出了一個“購買”的請求,那么該請求先被一個類似“Shopping.aspx”的頁面進行處理,然后該頁面再去通知類似“Shopping.aspx.cs”,接著開始一個復雜的頁面生命周期,最后激發對應事件(Page.Load,Button.Click)進行請求處理然后將結果返回給終端用戶。

上面這個過程相當復雜繁瑣,終端用戶的任何一個請求都是需要先經過一個復雜的頁面生命周期之后才能真正被處理。那么,我們創建一個“面向行為”的架構方案去取代“面向視圖”怎么樣?
如果我們先處理請求,然后再呈現視圖給終端用戶,這個流程是不是要更清楚明了一些呢?事實上,MVC就是這樣做的,用戶請求先被對應的Controller處理,然后再由后者呈現對應的View(附帶Model)。
### 2、什么是方配.NET MVC?
方配.NET MVC是方配獨立開發的MVC開發架構,繼承的ASP.NET MVC的所有優點,并優化ASP.NET MVC中復雜的部分,使開發基于MVC模式的.NET應用程式更加的方便。方配.NET MVC 也是一種使用 MVC(Model View Controller 模型-視圖-控制器)設計創建 Web 應用程序的模式:
* Model(模型)是應用程序中用于處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。
* View(視圖)是應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。
* Controller(控制器)是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,并向模型發送數據。

方配MVC控制器與視圖關系都是一對多的關系,一個控制器可對應多個視圖。
