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

表現層模式-MVC

編輯:關於ASP.NET

在前面簡述了從服務層到數據層參見架構設計目錄。剩下了表現層,一個再好的中間層表現也必須有一個用戶界面,提供和用戶交互,將用戶行為輸入轉化為系統操作,進入後台邏輯。在當下RAD(快速應用開發)工具的支持下,我們可以比較快速的完成UI設計,RAD追求所見即所得的快速反饋,快速應用。表現層也有一定其固定的邏輯(格式化,數據綁定,轉化等等,稱為UI邏輯)和界面展現。這裡UI邏輯指的是所有用來處理數據顯示在UI界面的邏輯和,將UI用戶輸入行為轉化為中間層指令的邏輯,負責UI和中間層數據流和行為的轉化。很多時候UI是最容易變化的以及最不易測試的邏輯(我一直相信,1:一段好的代碼一定要易於測試。2:重構的前提也必須有足夠的測試保證,才能讓我們的重構更有節奏更自信),而很大部分UI邏輯卻往往比較穩定的。這Matin Fowler提出的分離表現層模式。表現層模式主要分為3種大類:MVC,MVP,PM(微軟在sl和wpf起名為MVVM),這3類模式下延伸了很多變異體mvc在web的 model2(asp.net mvc,主要特征基於web特有uri路由)。mvp的變種:Passive View(被動視圖)和Supervising Controller(不清楚怎麼翻譯比較好),PM延伸MVVM。其目的都在於將多變的View和UI邏輯分離。

今天要說的是MVC(model-view-controller:模型-視圖-控制器)。在我們一開始就說結構和編程或者面向對象原則都是為了實現模塊的高內聚低耦合,而高內聚低耦合行之有效的方式就是分離關注點(SOC)。為了實現表現UI和表現邏輯的分離,使得他們之間更靈活,並且自治視圖(包含所有表現層代碼的類)。在30年前Trygve Reenskaug提出的MVC模式,或者更確切的說模范。其將表現層分為3類:model:是視圖展現數據,view用戶交互界面,Controller:將用戶輸入轉化為中間層操作。

模型(Model):在MVC中模型保持著一個應用程序的狀態,和相應視圖中來自用戶交互的狀態變化。在上圖中我們可以看到model會接受來之控制器的狀態變化響應和視圖的顯示狀態查詢view渲染的數據來源。同時model還有通過事件機制(觀察者模式)通知view狀態的改變要求view渲染響應。view和模型之間存在一定的耦合,view必須了解model,這也是MVP模式出現原因之一。正在這裡的模型model可以是來之分布式soap或者resetfull的dto(數據傳輸對象),也可以直接是我們的領域對象(do)或者數據層返回的數據集,並不嚴格的 要求。

控制器(Controller):控制器是又view觸發,響應用戶界面的交互,並根據表現層邏輯改變model狀態,以及中間層的交互,最終修改model,Controller不會關心視圖的渲染,是通過修改model,model的事件通知機制,觸發view的刷新渲染。控制器和模型的交互式一種“發出即忘”,或者分布式OneWay的調用。控制器Controller不會主動了了解view和view交互,除了唯一的視圖選擇外,控制器需要選擇下一次顯示的視圖view是什麼。一般控制器會請求全局應用程序路由下一個需要顯示的view,在使其呈現出來。

視圖(View):視圖時表現層模式出現的原因,因為他的多樣性和變化的頻繁性,不易測試(太多外界環境依賴),所以理想的視圖應該盡可能的啞,被動,視圖只負責渲染呈現給用戶交互。視圖由一些列GUI組件組成,響應用戶行為觸發控制器邏輯,修改model狀態使其保持view同步。視圖並需要相應model的變化被動的接受model狀態變化刷新相應給用戶。

MVC最先興起於桌面,但沒有流行起來,知道在web興起後,其變異體Model2在Web中流行起來,.net 下的ASP.NTE MVC。Model2中,將來自客戶端(浏覽器)的請求,被服務端攔截器(asp.net中HttpModule)根據url格式請求方式等轉發到固定的控制器,調用固定的Action,在Action中隊模型狀態進行修改,並選擇view,view並根據控制器傳來的最新model生產html,css,js前段代碼,並輸出到前段渲染。

在Model2中和原始MVC最大的差別在於:

1:視圖view和模型model之間沒有直接依賴,model並不知道view也不需要事件通知view,view也不需知道model,view操作的都是ViewModel(asp.net mvc 中ViewData容器)。2:控制器顯示傳入視圖數據給view,相應用戶的操作不是來自view,而是出於服務端應用程序前段的攔截器,捕獲url並轉發到相應的控制器,已經調用相應的action方法。

在現在說的MVC往往指的就是Web中Model2模式。在Model2中view是被動的,啞的,簡單。

本文出自 “破狼” 博客,請務必保留此出處http://whitewolfblog.blog.51cto.com/3973901/923346

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