張建平
(陜西工業(yè)職業(yè)技術(shù)學(xué)院 信息工程學(xué)院,陜西咸陽 712000)
MVC 全名是Model View Controller,是一種軟件設(shè)計典范,用于組織代碼用一種業(yè)務(wù)邏輯和數(shù)據(jù)顯示分離的方法,這個方法的假設(shè)前提是如果業(yè)務(wù)邏輯被聚集到一個部件里面,而且界面和用戶圍繞數(shù)據(jù)的交互能被改進(jìn)和個性化定制而不需要重新編寫業(yè)務(wù)邏輯,MVC 被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結(jié)構(gòu)中。
把一個應(yīng)用的輸入、處理、輸出流程按照model-viewcontroller 的方法進(jìn)行分離,這樣的一個應(yīng)用被稱為三個層,模型層、視圖層、控制層。
視圖:數(shù)據(jù)的展現(xiàn)。視圖是用戶看到并與之交互的界面。視圖向用戶顯示相關(guān)的數(shù)據(jù),并能接收用戶的輸入數(shù)據(jù),但是它并不進(jìn)行任何實際的業(yè)務(wù)處理。視圖可以向模型查詢業(yè)務(wù)狀態(tài),但不能改變模型。視圖還能接受模型發(fā)出的數(shù)據(jù)更新事件,從而對用戶界面進(jìn)行同步更新。
模型:應(yīng)用對象。MVC 模式圖模型是應(yīng)用程序的主體部分。模型代表了業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯;當(dāng)數(shù)據(jù)發(fā)生改變時,它要負(fù)責(zé)通知視圖部分;一個模型能為多個視圖提供數(shù)據(jù)。由于同一個模型可以被多個視圖重用,所以提高了應(yīng)用的可重用性。
控制器:邏輯處理、控制實體數(shù)據(jù)在視圖上展示、調(diào)用模型處理業(yè)務(wù)請求。當(dāng) Web 用戶單擊Web 頁面中的提交按鈕來發(fā)送HTML 表單時,控制器接收請求并調(diào)用相應(yīng)的模型組件去處理請求,然后調(diào)用相應(yīng)的視圖來顯示模型返回的數(shù)據(jù)。
MVC 優(yōu)點:首先最重要的是應(yīng)該有多個視圖對應(yīng)著一個模型的能力。在目前需求用戶快速變化的下,可能有多種方式訪問應(yīng)用要求。其次,由于模型返回的數(shù)據(jù)不帶任何顯示格式,因而這些模式也可直接應(yīng)用于模式使用。再次,由于一個應(yīng)用被分離為三層,因此有時候改變其中的一層就滿足應(yīng)用的改變。最后,它還有利于軟件工程化管理。由于不同的層各司其職,每一層不同的應(yīng)用具有某些相同的特征,有利于通過工程化、工具化產(chǎn)生管理程序代碼。
表現(xiàn)層(Presentation layer)包含表示代碼、用戶交互GUI、數(shù)據(jù)驗證。該層用于向客戶端用戶提供GUI 交互,它允許用戶在顯示系統(tǒng)中輸入和編輯數(shù)據(jù),同時系統(tǒng)提供數(shù)據(jù)驗證功能。

圖1 MVC 模式

圖2 Mvc 設(shè)計體系結(jié)構(gòu)
業(yè)務(wù)邏輯層(Business layer)包含業(yè)務(wù)規(guī)則處理代碼,即程序中與業(yè)務(wù) 相關(guān)專業(yè)算法、業(yè)務(wù)政策等等。該層用于執(zhí)行業(yè)務(wù)流程和制訂數(shù)據(jù)的業(yè)務(wù)規(guī)則。業(yè)務(wù)邏輯層主要面向業(yè)務(wù)應(yīng)用,為表示層提供業(yè)務(wù)服務(wù)Mvc 體系結(jié)構(gòu)圖
數(shù)據(jù)持久層(Persistence layer)包含數(shù)據(jù)處理代碼和數(shù)據(jù)存儲代碼。數(shù)據(jù)持久層主要包括數(shù)據(jù)存取服務(wù),負(fù)責(zé)與數(shù)據(jù)庫管理系統(tǒng)(如數(shù)據(jù)庫)之間的通信。三個層次的每一層在處理程序上有各自明確的任務(wù),在功能實現(xiàn)上有清晰的區(qū)分,各層與其余層分離,但各層之間存有通信接口。
ASP.NET 提供了實現(xiàn)這種經(jīng)典設(shè)計模式的類似環(huán)境。軟件開發(fā)者可以通過在ASP 頁面中開發(fā)用戶接口來實現(xiàn)視圖;而控制器的功能是在邏輯功能代碼中實現(xiàn);模型通常對應(yīng)著應(yīng)用系統(tǒng)的業(yè)務(wù)部分。在ASP.NET 中實現(xiàn)這種設(shè)計而提供的一個多層系統(tǒng),較經(jīng)典的ASP 結(jié)構(gòu)實現(xiàn)的系統(tǒng)來說有明顯的優(yōu)點。將用戶顯示(視圖)從動作(控制器)中分離出來,提高了代碼的重用性。將數(shù)據(jù)(模型)從對其操作的動作(控制器)分離出來可以讓你設(shè)計一個與后臺存儲數(shù)據(jù)無關(guān)的系統(tǒng)。就MVC 結(jié)構(gòu)的本質(zhì)而言,它是一種解決耦合系統(tǒng)問題的方法。
同時還可以使用測試驅(qū)動開發(fā)。ASP.NET MVC 框架為Web 應(yīng)用的目錄結(jié)構(gòu)定義了一個專用的模式,還提供了一個controller 基類,用來處理發(fā)動到“action”的請求。開發(fā)人員還可以用上這個版本中所特有的Visual Studio 2008MVC 模板,利用模板所提供的單元測試結(jié)構(gòu)來輔助Web 應(yīng)用開發(fā)。
MVC 設(shè)計模式的擴(kuò)展
①實現(xiàn)一個模型的多個視圖;
②采用多個控制器;
③當(dāng)模型改變時,所有視圖將自動刷新;
④所有的控制器將相互獨立工作。
這就是MVC 模式的好處,只需在以前的程序上稍作修改或增加新的類,即可輕松增加許多程序功能。以前開發(fā)的許多類可以重用,而程序結(jié)構(gòu)根本不再需要改變,各類之間相互獨立,便于團(tuán)體開發(fā),提高開發(fā)效率。下面討論如何實現(xiàn)一個模型、兩個視圖和一個控制器的程序。其中模型類及視圖類根本不需要改變,與前面的完全一樣,這就是面向?qū)ο缶幊痰暮锰?。對于控制器中的類,只需要增加另一個視圖,并與模型發(fā)生關(guān)聯(lián)即可。
同樣也可以實現(xiàn)其它形式的MVC例如:一個模型、兩個視圖和兩個控制器。從上面可以看出,通過MVC 模式實現(xiàn)的應(yīng)用程序具有極其良好的可擴(kuò)展性,是ASP.NET 面向?qū)ο缶幊痰奈磥矸较颉?/p>
本論文介紹mvc 設(shè)計模式的發(fā)展歷史、能模式、體系結(jié)構(gòu),以及在asp.net 環(huán)境下實現(xiàn)基于mvc 應(yīng)用需要完成的工作,以及模式擴(kuò)展及未來發(fā)展方向。
[1]陸榮幸,郁洲等.《J2EE 平臺上的mvc 設(shè)計模式的研究與實現(xiàn)》.計算機應(yīng)用與研究,2003年3月20 期:144-166
[2]陳秋余《mvc 模式在asp.net 下的實現(xiàn)》.第一版.北京:清華大學(xué)出版社,2001