NET_Web開發震撼之變:.NET_MVC框架
版權聲明:本作品已刊登在《IT實驗室周報》第03期第05版,作者周岳。版權屬於《IT實驗室周報》與中國IT實驗室網站共同所有,禁止任何媒體、網站或個人在未經書面授權的情況下轉載、摘編或利用其它方式使用上述作品。已經授權使用作品的,應在授權範圍內使用,並註明「來源:IT實驗室周報」。違反上述聲明者將追究其相關法律責任。
MVC概念
MVC是一種架構設計模式,該模式主要應用於圖形化用戶界面(GUI)應用程序。那麼什麼是MVC?MVC由三部分組成:Model(模型)、View(視圖)及Controller(控制器)。
Model即應用程序的數據模型。任何應用程序都離不開數據,數據可以存儲在資料庫中、磁碟文件中,甚至內存中。Model就是對這些數據的抽象,不論數據採取何種存儲形式,應用程序總是能夠通過Model來對數據進行操作,而不必關心數據的存儲形式。數據實體類就是常用的一種Model。例如,一個客戶管理應用程序使用資料庫來存儲客戶數據,資料庫表中有一個客戶表Customer,相應的程序中一般會建立一個數據實體類Customer來與之對應,這個實體類即使客戶表的Model。
View是應用程序的界面。用戶通過View來操作應用程序,完成與程序的交互。View提供了可視化的界面來顯示Model中定義的數據,用戶通過View來操作數據,並將對Model數據操作的結果返回給用戶。在桌面應用程序中,View可能是一個或多個Windows窗體。在Web應用程序中,View是由一系列網頁構成,在ASP.NET網站中即為.aspx頁面。
Controller 定義了程序的應用邏輯。用戶通過View發送操作命令給Controller,由Controller按照程序設計的邏輯來更新Model定義的數據,並將操作結果通過View返回給用戶。
MVC的歷史
MVC這一概念最早由美國教授Trygve Reenskaug於1979年提出。1988年MVC這一設計模式正式在《A Cookbook for Using the Model-View-Controller User Interface Paradigm in Smalltalk -80》一書中提出。伴隨著微軟Windows操作系統的迅速發展與普及,圖形化用戶界面應用程序逐漸成為主流,很多編程語言都出現了MVC框架,以方便開發人員使用該模式來設計應用程序。這些框架中大部分都是針對Web應用程序。
.NET Web開發中MVC設計模式的實現
ASP.NET 1.x中使用了CodeBehind技術,徹底終結了傳統ASP程序開發的夢魘:程序邏輯與HTML界面元素混雜在一起。CodeBehind技術將代表程序界面(View)的.aspx文件與邏輯(Controller)代碼.vb/.cs文件的分離即是一種MVC式的設計。ASP.NET 2.0中又出現了CodeBeside技術,即一個.aspx文件可以有多個.vb/.cs文件,這又方便了界面與邏輯代碼的進一步分離。
2008年3月微軟發布了針對ASP.NET 3.5 的MVC框架 (Preview 2 版本)。這是一個真正意義上的ASP.NET MVC框架。該框架可以說是對之前為開發人員所熟悉的基於Web Form的應用程序開發方式的"顛覆"。變化可謂"震撼":
1. 使用URL Routing技術:Web程序的URL不再是指向具體的物理頁面.aspx,而是指向某個Controller的某個方法。一個典型的MVC架構的程序,其URL可能如下所示:
http://www.mysite.com/Customer/Index
使用該MVC架構的程序其URL不必有文件擴展名。上面這個URL中的Customer即為Controller的名字。而Index是Customer定義的一個方法名。
2. Web程序的界面.aspx不再使用伺服器端的Form:
<asp: form runat="server"></form>
那麼與伺服器端的Form相關的Postback以及頁面生命周期的事件也不存在了。
3. 頁面中不再有View State。MVC下將不能使用View State來存儲程序狀態信息。
4. 不再提供依賴於伺服器端Form的伺服器控制項事件,開發人員熟悉的Button_Clicked事件在MVC下將不再需要。
NET MVC示例
安裝完 ASP.NET MVC Preview 2後,VS2008中會添加一個新的項目模板"ASP.NET MVC Web Application", 如下圖所示
public class GlobalApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { // 注意: IIS7以下的IIS版本需將URL格式設置為 "{controller}.mvc/{action}/{id}" to enable routes.Add(new Route("{controller}.mvc/{action}/{id}", new MvcRouteHandler()) {
Defaults = new RouteValueDictionary(new { action = "Index", id = "" }), });//設置URL Routing格式 routes.Add(new Route("Default.aspx", new MvcRouteHandler()) { Defaults = new RouteValueDictionary(new { controller = "Customer", action = "Index", id = "" }), });//設置默認URL指向Customer Controller的Index方法 } protected void Application_Start(object sender, EventArgs e)
{ RegisterRoutes(RouteTable.Routes); } } |
下面來實現Customer 的Model、Controller及View:
Model: 在項目中的Model文件夾下,新建一個"Linq to SQL Classes",將Northwind資料庫中的Customer表拖拽到其設計視圖中。這樣就完成了Customer對應的Model。如圖4