Model
Trygve M H Reenskau當初提出的MVC是作為基於GUI的桌面應用的架構模式並不太適合Web本身的特性雖然MVC/MVP也可以直接用於ASPNET Web Forms應用但這是因為微軟就是基於桌面應用的編程模式來設計基於Web Forms的ASPNET應用框架的Web應用不同於GUI桌面應用的主要區別在於用戶是通過浏覽器與應用進行交互交互請求和響應是通過HTTP請求和響應來完成的
為了讓MVC能夠為Web應用提供原生的支持另一個被稱為Model 的MVC變體被提出來這來源於基於Java的Web應用架構模式Java Web應用具有兩種基本的基於MVC的架構模式分別被稱為Model 和Model Model類似於我們前面提及的自治試圖模式它將數據的可視化呈現和用戶交互操作的處理邏輯合並在一起Model 使用於那些比較簡單的Web應用對於相對復雜的應用應該采用Model
為了讓開發者采用相同的編程模式進行GUI桌面應用和Web應用的開發微軟通過ViewState和Postback對HTTP請求和回復機制進行了封裝使我們能夠像編寫Windows Forms應用一樣采用事件驅動的方式進行ASPNET Web Forms應用的編程而Model 采用完全不同的設計它讓開發者直接面向Web讓他們關注HTTP的請求和響應所以Model 提供對Web應用原生的支持
對於Web應用來說和用戶直接交互的UI界面由浏覽器來提供用戶交互請求通過浏覽器以HTTP請求的方式發送到Web服務器服務器對請求進行相應的處理並最終返回一個HTTP回復對請求予以響應接下來我們詳細討論作為MVC的三要素是如何相互協作最終完成對請求的響應的圖所示的序列圖體現了整個流程的全過程
圖 Model 交互流程
Model 中一個HTTP請求的目標是Controller中的某個Action後者體現為定義在Controller類型中的某個方法所以對請求的處理最終體現在對目標Controller對象的激活和對相應Action方法的執行一般來說Controller的類型和Action方法的名稱以及作為Action方法的部分參數(針對HTTPGET)可以直接通過請求的URL解析出來
如圖所示我們通過一個攔截器(Interceptor)對抵達Web服務器的HTTP請求進行攔截一般的Web應用框架都提供了這樣的攔截機制對於ASPNET來說我們可以通過HttpModule的形式來定義這麼一個攔截器攔截器根據請求解析出目標Controller的類型和對應的Action方法的名稱隨後目標Controller被激活相應的Action方法被執行
在激活Controller對象的目標Action方法被執行過程中它可以調用Model獲取相應的數據或者改變其狀態在Action方法執行的最後階段會選擇相應的View整個View被最終轉換成HTML以HTTP響應的形式返回到客戶端並呈現在浏覽器中綁定在View上的數據來源於Model或者基於顯示要求進行的簡單邏輯計算我們有時候將它們稱為VM(View Model)即基於View的Model(這裡的View Model與MVVM模式下的VM是完全不同的兩個概念後者不僅包括呈現在View中的數據也包括數據操作行為)
返回目錄ASPNET MVC 框架揭秘
編輯推薦
Java程序性能優化讓你的Java程序更快更穩定
Visual C++音頻/視頻技術開發與實戰
From:http://tw.wingwit.com/Article/program/net/201311/16123.html