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

圖1 MVC 模式

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