999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ASP.NET MVC的研究

2010-12-31 00:00:00涂剛李建劉華清紀永玲許子昊
軟件工程 2010年8期

摘要:闡述了微軟公司的Web App平臺發展階段,對WebForm、MVC、三層結構和MVP進行分析比較,提出了在運用ASP.NET進行項目開發過程中選擇開發模式和軟件架構的建議;并介紹了ASP.NET MVC中View、Control和Model中應包含哪些具體內容。

關鍵詞:ASP.NET WebForm;MVC;設計模式;三層架構;MVP

The Research Of ASP.NET MVC

Tu Gang Li Jian Liu Huaqing Ji Yongling Xu Zihao

(Jiangsu Vocational And Technical College Of Finance Economics Jiangsu Huanai 223003)

Abstract: The essay describes the development of Microsoft's Web App Platform Stage and analyses of WebForm, MVC, Three Tiers and MVP. The essay recommendations to the picking of design pattern and software framework in the use of ASP.NET project, it introduces that what should be involved in View, Control and Model of ASP.NET MVC.

Keywords: ASP.NET WebForm, MVC, Design Pattern, Three Tiers, MVP

1 引言

ASP.NET MVC Framework是微軟官方提供的MVC模式,是編寫ASP.NET Web應用程序的一個框架。此前已習慣了運用ASP.NET WebForm開發模式的設計人員運用MVC模式可能會有所困惑,為什么微軟推出ASP.NET MVC Framework?同時,在ASP.NET WebForm開發模式設計Web應用程序開發時,設計人員可能會運用三層結構架構Web系統,而MVC模式也是由三個事物組成,因此技術人員就會產生疑惑,容易將二者混為一談。

通過ASP.NET WebForm、MVC、三層結構以及MVP之間進行比較,為Web應用程序開發人員在項目開發設計中選用不同的開發模式和軟件結構來架構系統提供了參考。同時結合江蘇省大學生實踐創新訓練項目“基于ASP.NET MVC的校內大學生社區系統設計與實現”,介紹了ASP.NET MVC在Web應用程序系統開發中其View、Control和Model中應包含哪些具體內容,為ASP.NET MVC的運用提供了借鑒的方法和技巧。

2 ASP.NET MVC與相關技術

2.1 ASP.NET MVC

ASP.NET MVC——ASP.NET MVC的推出確實大大改變了Web App的開發方式,很多Web Form下的方式不被提倡了,如服務器端控件將被拋棄,轉而再次使用客戶端控件;事件驅動模型被拋棄,轉而使用了類似傳統的URL跳轉處理模型。而且在數據驗證等方式上與Web Form下提倡的方式有了很大變化。

MVC是1979年提出的,起初是用于軟件的一種架構模式。模型-視圖-控制器(MVC)是Xerox PARC在上個世紀八十年代為編程語言Smalltalk-80發明的一種軟件設計模式[1],然后被推薦為Sun公司J2EE平臺的設計模式,并且受到越來越多的使用 Cold Fusion 和 PHP 的開發者的歡迎。

MVC (Model-View-Controller) 在 Java / JSP / J2EE 中已廣泛運用,并衍生出 Struts 等開放源碼的 Framework (框架)。其主要目的是為了在開發復雜的大型網站時,能將不同的功能作切割,提高程序代碼的可讀性,以及組件的可重用性。其結構如圖1所示[1]。

2.2 ASP. NET MVC與WebForm

ASP.NET MVC與Webform技術的架構如圖2所示[2]。

ASP.NET MVC將WebForm中的一個IHttpHandler換成了兩個IHttpHandler。Web Form中Page(IHttpHandler)既負責業務邏輯又負責顯示,在MVC中換成了兩個IHttpHandler,第一個Handler負責業務邏輯,第二個Handler(ASPX)是View,用于顯示的。在MVC中的業務實際執行時間被提前到了HttpMolde中,而Web Form的請求只在httpHandler容器中被執行。即MVC中Controller與View的分離是使用的ASP.NET請求管道隔離實現的,這樣在不影響效率(一次請求,而ASP.NET MVC使用了HttpModules來攔截地址請求,具體用到了System.Web.Routing類庫(MVC2中)。在Application_Start時,UrlRoutingModule類攔截請求,給RouteTable的全局對象一個攔截的設置,設置使用RouteCollection對象進行保存,MVC對這個類進行了擴展——RouteCollectionExtensions??蛻粼L問頁面時,UrlRoutingModule類攔截請求,在RouteTable中查看是否符合規則,符合就調用MvcHandler。MvcHandler的ProcessRequest方法再調用Controller;從而達到代碼的邏輯層次上的分離,實現了Controller代碼的單獨管理。顯然MVC模式有利于理解分層邏輯,把握代碼的層次感。Controller到aspx頁面之間的過程,已經被MVC框架隔離。至于Controller或者View頁面與Model調用的過程,則由開發人員來控制。

MVC縱向切割了開發過程中的代碼,從服務器到瀏覽器層層分離,層次之間耦合度很低,因為它是順著底層的開發脈絡進行封裝,所以有利于開發者對整個程序過程流轉的理解。但是MVC有一個非常大的缺點,這個缺點是和整個軟件發展思路相背離的,那就是它無法封裝,所以無法被重用。MVC只適合輕量級的開發,桌面開發是極少用到的。Web開發恰恰就是輕量級,因為網絡硬件條件的限制,不需要也無法做到非常復雜的邏輯。這也是MVC非常非常適合Web開發的原因[3]。

ASP.NET WebForm中頁面請求則只在HttpHandler容器中執行,對其進行分層,只能依靠邏輯上分離。Web Form模型中事件必須被注冊到頁面里,比如Button1_Click這樣的代碼。Page_Load方法在頁面裝載時執行,而Button1_Click必須在客戶點擊后才能執行;而顯示代碼被寫入Page_Load方法中,這就造成了需要編寫額外的代碼量,如if (!Page.IsPostBack)。而在Button1_Click執行后如果需要顯示,則比較難處理。替代的解決方案是使用Response.Redirect,在一個aspx頁面中處理邏輯,處理后跳轉到另外一個顯示的頁面。這樣在兩個頁面中數據很難共享,加外跳轉時就會多一次請求。當然可通過Server.Execute,Server.Transfer或者Context.RewritePath等處理方式實現數據共享,兩個頁面轉換則在服務器端完成[4]。

通過分析可以知道,MVC框架在Web應用開發方面具有很強的優越性,而Web Form也有一定優勢,在簡單的應用中更加容易開發。WebForm也可實現和MVC一樣的分層方式,只是處理時需多寫一些代碼。用WebForm開發分層遇到的最大問題是頁面之間數據的傳遞。ASP.NET MVC與WebForm比較起來,WebForm更容易理解,不會產生復雜的配置。

WebForm橫向切割了代碼,控制和顯示是封裝在一起的。從開發者思維邏輯上而不是實際情況上對代碼進行封裝,開發WebForm容易上手的原因也就在此了,但這不利于開發者對底層程序流轉機制的理解。WebForm中View和Controller是在一起的,WebForm出現后,誕生了大量的組件,這是MVC模式所不及的。微軟的經驗之一是硬件發展很迅速。代碼的封裝是靠犧牲運行效率來提高開發效率,犧牲的運行效率通過提高硬件性能來解決。但這個經驗不適合網絡硬件,網絡硬件要考慮兼容性而且是國家的基礎設施,更新的靈活性遠比單機要差。可用如圖3來說明[4]。

2.3 ASP. NET MVC與三(N)層架構

N層結構是一種軟件抽象的層次結構,是對復雜軟件的一種縱向切分,每一層次中負責同一類型的操作,以便將各種代碼以其負責的功能作為依據來分割,以降低軟件的復雜度,提高其可維護性。一般來說,層次之間是向下依賴的,下層代碼未確定其接口(契約)前,上層代碼是無法開發的,下層代碼接口(契約)的變化將使上層的代碼一起變化。三層結構是N層結構的一種,是人們在長時間使用中得出來的一種應用場合廣泛的N層結構,被當作一種典型的軟件層次結構而廣為流傳。這里所說的三層架構[1]指:表現層(顯示層)、業務邏輯層、數據訪問層(持久化),如圖4所示。

MVC中的三種構造型元素之間并不存在明顯的層次結構,沒有明顯的向下依賴關系,相反的,View和Model往往是比較獨立的,而Control是連接兩者的橋梁;MVC中每個塊可以獨立測試的。而三層結構中,上層模塊的運行或測試都必須要提供下層代碼或者提供相應接口。相對來說,MVC復雜得多,但是結構更清晰,耦合性更低。MVC中每一塊內部(特別是Model)常被設計為多層。一個良好的MVC模式構建的結構中,Control是核心,小且較為穩定的,可作為一個核心框架來提供,并提供擴展點,只需要簡單配置就可以運行。而View則可能是一套或多種供選擇的視圖引擎,決定了系統展示給用戶的界面,使用時的主要工作量在于擴展點以及根據需要而設計的視圖模板。Model則是業務提供者,決定了系統提供的功能,其內部可能是一些普通的類或是實現了某些接口的類,對于復雜的軟件可能會分成很多層,如業務邏輯層、業務提供層、系統提供層、數據提供層、數據訪問層等。MVC與三層架構之間的關系如圖5所示[5]。

2.4 MVP與MVC

隨著ASP.NET和Windows窗體用戶界面創建技術越來越強大,讓用戶界面層負責多于它本應做的事是很常見的。沒有一個清晰的職責劃分,界面層經常淪為一個包含實際上應屬于程序其他層的邏輯的容器。有一個稱為:模型(Model)-視圖(View)-提供器(Presenter)的設計模式(MVP),特別適合解決這個問題。

MVP設計模式將界面層中的邏輯和代碼重構為更加易于測試的、新型的、可重用的代碼。MVP即可以應用到Web項目中,也可以應用到Windows Form項目中,MVP方便測試機制為大型復雜的企業級應用開發帶來極大的方便,MVP模式有Model-Presenter-View三個層次,如圖6所示。其中Controller層是負責狀態保存和頁面跳轉的,可根據需要進行設置。

MVP模式中Model、Presenter與View的關系如圖7所示,Model并不與View直接通信,Presenter將充當中間角色。在MVC中,當Model被Controller更新后,會直接通知View并更新顯示。從兩者模式圖中發現MVP與MVC最大的一個區別就是Model與View層之間是否存在通信(甚至雙向通信)。在MVP模式下的Presenter擁有“絕對權力”。如果沒有它,Model與View就是兩個孤島,完全解耦了的。因此MVP中的View只從實現相應IView接口中的屬性和方法,而最終調用IView接口下的哪個視圖實例則完全交給Presenter。

Supervising Controller模式是對MVP模式作了一定變動,如圖8所示。與圖7所示的MVP模式主要有以下區別。

(1) Presenter實現復雜的View邏輯;(2) View實現部分邏輯;(3) View可以與Model綁定,Model的變化可以通知View;(4) 這種模式下,Presenter和View是松耦合,Presenter可以和多個View直接通信。

Supervising Controller模式其實很接近于MVC模式,只是提供了Presenter與View之間的“雙向通信”。

3 ASP.NET MVC在項目中的應用

MVC模式中,View中的邏輯比較簡單,重點放在Model中,而Controller是對業務流程的控制,應該保持“代碼清爽”。業務邏輯是系統架構中體現核心價值的部分,主要集中在業務規則的制定、業務流程的實現等與業務需求有關的系統設計。View是顯示邏輯,Controller是流程控制邏輯,Model是“邏輯大本營”。使用 MVC 框架時要將“經常變化”的業務規則(位于Controller)和相對穩定的業務邏輯(位于Model)分離開。為適應不斷變化的業務需求,在Model層采用接口方式實現。

“基于ASP.NET MVC的校內大學生社區系統設計與實現”省大學生實踐創新訓練項目中主要運用Robustness分析方法,找出哪些對象應放在Model中,哪些屬于控制邏輯。Robustness分析方法將系統中的對象分為實體對象、邊界對象和控制對象。

(1)實體對象(entity object)。

通常是來自域模型中的對象(也就是現實世界),它常對應于數據庫表和文件,這些數據表和文件中存儲了執行用例所需的數據。有些實體對象是臨時“對象”(如搜索結果),當用例結束后將消失。

(2)邊界對象(boundary object)。

參與者使用它來同系統交互,通常包含窗口、屏幕、對話框和菜單。如果有GUI原型,就可知道許多主要的邊界對象。

(3)控制對象(control object)。

將邊界對象和實體對象關聯起來(通常被稱為控制器,因為它們通常不是真正的對象),包含大部分應用邏輯,它們在用戶和存儲的數據之間架起一座橋梁。控制對象中包含經常修改的業務規則和策略。這樣修改時只需要在這些對象中進行,而不會涉及到用戶界面和數據庫模式??刂破髋紶栆矔窃O計中的“真正對象”,但大部分控制器只是一個占位符,用于避免遺漏用例要求的任何功能和系統行為。

實體對象、邊界對象和控制對象分別對應MVC的Model、View、Controller三種構造型元素。對象的劃分有四個交互規則。

(1) 參與者只同邊界對象交互;(2) 邊界對象只能同控制器和參與者交互;(3) 實體對象只能同控制器交互;(4) 控制器可同邊界對象,實體對象以及其他控制器交互,但不能同參與者交互。

四個規則可描述為:邊界對象和實體對象都是名詞,而控制器是動詞。名詞和名詞之間不能交互,但動詞之間可以。

4 結束語

微軟公司推出ASP.NET MVC Framework讓Web開發設計人員多了一個選擇。文章對WebForm、ASP.NET MVC和MVP三種軟件模式和三層架構進行了分析,對軟件模式的選擇提出了參考性的建議,在項目開發過程中,結合具體情況選擇能充分發揮該模式優點和項目開發人員自身特長的軟件模式。具體介紹了ASP.NET MVC中Model,View和Controller三種構造型元素各應包含哪些內容。

ASP.NET MVC Framework推出時間較短,對ASP.NET MVC Framework研究處于了解、運用階段。并且,微軟公司必將推出ASP.NET MVC Framework的更多模板,因此,還存在許多問題需要進一步探討和研究。

參考文獻

[1]Buschmann et al. Pattern-Oriented Software Archtiecture. John Wiley Sons,1996,pp. 125-143.

[2]http://www.asp.net/mvc/whatisaspmvc/

[3]http://msdn.microsoft.com/zh-cn/magazine/dd252940.aspx

[4]http://msdn.microsoft.com/zh-cn/magazine/dd252940.aspx

[5]http://msdn.microsoft.com/zh-cn/library/ms978748.aspx

[6]msdn.microsoft.com/zh-cn/library/ms978753.aspx

[7]http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032374931Culture=zh-CN

主站蜘蛛池模板: 一级毛片在线播放免费观看| 亚洲性视频网站| 国产精品视频系列专区| 五月天在线网站| 激情五月婷婷综合网| 欧美精品v欧洲精品| 免费在线一区| 成人在线不卡| 欧美不卡视频在线观看| 亚洲一级无毛片无码在线免费视频 | 欧美一区二区福利视频| 极品私人尤物在线精品首页| 9啪在线视频| 日本高清有码人妻| 2020国产精品视频| 国产精品九九视频| 91偷拍一区| 中日韩欧亚无码视频| 97超级碰碰碰碰精品| 精品自窥自偷在线看| 女人爽到高潮免费视频大全| 草逼视频国产| 国产精品免费露脸视频| 国产成年无码AⅤ片在线| 免费一级成人毛片| 欧美日韩国产精品综合| 久久精品国产免费观看频道 | 国产av一码二码三码无码| 久久综合久久鬼| 国产无码精品在线播放| 国产成人在线无码免费视频| 99热这里只有免费国产精品| 国产97公开成人免费视频| 国产99视频在线| 国产精品主播| 成人字幕网视频在线观看| 国产乱子伦精品视频| 国产精品一区二区不卡的视频| 国产美女久久久久不卡| 亚洲中久无码永久在线观看软件| 黄色三级毛片网站| 久久国产av麻豆| 毛片手机在线看| 亚洲欧洲日本在线| jizz在线免费播放| 狠狠做深爱婷婷综合一区| 国产在线观看精品| 人妻无码中文字幕第一区| 色综合热无码热国产| 午夜欧美在线| 粗大猛烈进出高潮视频无码| 在线a视频免费观看| 8090成人午夜精品| 亚洲日本中文字幕天堂网| 波多野结衣AV无码久久一区| 色呦呦手机在线精品| 国产精品三区四区| 国产精品污污在线观看网站| 欧美成人免费午夜全| 亚洲日本在线免费观看| 特级做a爰片毛片免费69| 99er精品视频| 无码内射在线| 国产精品午夜福利麻豆| 国产又粗又爽视频| 精品久久久无码专区中文字幕| 国产95在线 | 综合亚洲色图| 日韩欧美中文在线| 亚洲婷婷丁香| 中文无码精品a∨在线观看| 四虎永久在线精品国产免费| 欧美精品亚洲日韩a| 一级毛片高清| 国产女人水多毛片18| 国产啪在线91| 久久久久九九精品影院| 欧美v在线| 在线观看av永久| 国产成人精品一区二区不卡| 狼友av永久网站免费观看| 亚洲天堂视频网站|