程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 快速搞懂ASP.NET MVC

快速搞懂ASP.NET MVC

編輯:關於ASP.NET

有一只企鵝首先發現地球暖化、冰山在融化,回來告訴其它企鵝,卻沒有任 一只企鵝願意相信;因為企鵝們覺得現在生活過得很好,都不想費心思考如何改 變、改變何時會來臨,因此仍每天做例行性的工作,不願去研究別人的觀點。「 有時人們會抗拒改變,其實只是不想改變;但是願意接收新觀念的技術人員,通 常會活得比較久」。本帖只提供 MVC Pattern 的觀念和架構介紹,僅供未接觸 過 MVC Framework 的 .NET 技術人員作為參考之用,以評估是否要深入學習或 在將來的項目導入。

常在網絡上,看到有網友誤認 MVC 和 3-Tier (三 層架構) 是類似的東西:

http://topic.csdn.net/u/20090405/21/97a137ff-2105-4117-a0c3- 39d7f0f1c952.html

http://topic.csdn.net/u/20090415/13/9ebe5011- c56b-47e6-9f89-40b70896a041.html

但二者本質上是完全不同的概念, 如下:

3-Tier 或 N-Tier 的架構,中間層可能包含 EJB, Enterprise JavaBeans (J2EE),或 .NET Enterprise Services、Remoting、WCF:

Client (WebPage) -- [ BLL (業務邏輯層) -- DAL (數據訪問層) ] (Web Server) -- 數據來源或數據庫

Client (WebPage) -- [ BLL (業務 邏輯層) -- DAL (數據訪問層) ] (Web Server + Application Server) -- 數 據來源或數據庫

MVC 則為:

● Model (模型) - 包含 BLL、DAL 。View 和 Controller 都依賴於 Model,但是 Model 既不依賴於 View,也不 依賴於 Controller,這是分離的主要優點之一

● View (視圖) - 僅負 責生成輸出 (UI)。以 ASP.NET MVC 來說,不再有 Code-behind 這種 .aspx.cs 文件,亦無 runat="server" 標記、form 標記、控件聲明、事件處 理

● Controller (控制器) - 控制整個系統的 workflow、運作邏輯、 錯誤處理、身分驗證和授權、用戶輸入數據驗證、…等等

總的來 講,微軟的 ASP.NET MVC Framework 是為了讓 ASP.NET 更適合中、大型的項目 ,能統一規劃、控管整個網站系統的流程 (用 Controller 處理),並更有效地 分工開發、日後維護 (避免許多 WebForm 裡重復出現相同功能的自定義函數)、 管控某個功能在修改後對系統整體的影響,並將不同的功能作更明確地切割,讓 不同專長的技術人員各司其職,也順便提高了代碼的可讀性,便於測試 (TDD, test -driven development) (減少直接綁到用戶界面中的代碼量) [4],並達到 「松散耦合 (loosely coupled)」,讓組件易於更換和重復使用。但也因此, ASP.NET 程序員必須先改變過去,把很多業務邏輯、輸入驗證、頁面切換 …等雜七雜八的功能,全部寫在 Code-Behind (aspx.cs) 裡的舊習慣。

ASP.NET MVC provides a framework that enables you to easily implement the model-view-controller (MVC) pattern for Web applications. This pattern lets you separate applications into loosely coupled, pluggable components for application design, processing logic, and display. ASP.NET MVC also greatly facilitates test -driven development (TDD).

事實上,MVC Pattern 的發明已有二十多年,其與 再衍生的觀念和框架 (MVP),在 Java / J2EE / Struts 的一些 Framework 早 已行之多年。MVC 模式的結構如下 [4]:

● View (JSP) 只純粹用來生 成輸出,不涉及數據來源的訪問、事件處理、各種邏輯處理和運算工作。因此更 適合大型項目的分工,把這層完全交由美工人員制作 (而非程序員兼美工和排版 )。此層如同 ASP.NET 中的 .aspx 前台頁面,亦即 UI (User Interface)。

● Model (JavaBean、EJB 組件) 用來存放獨立且可重復使用的組件, 包括:數據來源 (數據庫) 的訪問、商業邏輯的代碼,並應與 View 作完整地切 割,以便保留系統日後擴充或改寫時的彈性。此層如同 ASP.NET 中的 App_Code 文件夾中的自定義類、DataSet (.xsd)、TableAdapter、…等等。

● Controller (Java Servlet) 用來控制整個網站處理的「流程」,負 責協調 View 和 Model 之間的流程傳遞和轉向,也要管理和指派由哪個文件去 接收用戶所提出的「請求 (request)」,亦即由它決定要展現哪一個 aspx 文件 給用戶。當用戶從浏覽器送出 request 時 (例若用鼠標單擊頁面中的控件,或 輸入數據後單擊 Button 的提交、輸入 URL 網址、點選 hyperlink…等 等),Controller 裡定義的某些 method 會判斷要交由 Model 中的哪些運算邏 輯去處理,然後再判斷要將處理結果傳回哪一個 View 去顯示出來。此外, Controller 還可包含錯誤處理、授權、輸入驗證…等功能的代碼,集中 統一處理,以避免傳統 WebForm 裡大量重復的代碼。但說穿了,Controller 事 實上只是一個自定義類,搭配一些 Attribute (特性)。而 Controller 也是目 前 ASP.NET 所欠缺的部分。

圖 1 MVC (Model 2) 架構的運作方式,可與下圖 2 的 ASP.NET MVC 項目 相互對應

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved