浙江商業(yè)職業(yè)技術(shù)學(xué)院信息技術(shù)分院 徐 楓
近年來,隨著Web應(yīng)用的不斷發(fā)展,MVC設(shè)計(jì)模式逐漸成為廣大開發(fā)者非常感興趣的設(shè)計(jì)模型。MVC模式也逐漸在開發(fā)者中運(yùn)用,并有增長(zhǎng)趨勢(shì)。隨著網(wǎng)絡(luò)應(yīng)用的快速增加,MVC模式對(duì)于Web應(yīng)用的開發(fā)無疑是一種非常先進(jìn)的設(shè)計(jì)思想,無論選擇哪種語言,無論應(yīng)用多復(fù)雜,MVC模式都能為理解分析應(yīng)用模型時(shí)提供最基本的分析方法,為構(gòu)造產(chǎn)品提供清晰的設(shè)計(jì)框架,為軟件工程提供規(guī)范的依據(jù)。
MVC模式是一種復(fù)合設(shè)計(jì)模式,一種在特定場(chǎng)合用于解決某種實(shí)際問題來得出的可以反復(fù)實(shí)踐的解決方案。該模式有三個(gè)部分組成:展示層-View;控制層-Control;模型層-Model。首先MVC中的三個(gè)部分之間并不存在明顯的層次結(jié)構(gòu),沒有明顯的向下依賴關(guān)系,相反的,View和Model往往是比較獨(dú)立的,而Control是連接兩者的橋梁,更像是橫向的切分。MVC結(jié)構(gòu)比較復(fù)雜,但是MVC中每個(gè)部分都是可以獨(dú)立測(cè)試的,結(jié)構(gòu)更清晰,耦合性更低。三者之間關(guān)系如圖1所示。
MVC英文即Model-View-Controller,即把一個(gè)應(yīng)用的輸入、處理、輸出流程按照Model、View、Controller的方式進(jìn)行分離,這樣一個(gè)應(yīng)用被分成三個(gè)核心部件——視圖、模型、控制。
圖1 MVC架構(gòu)的關(guān)系圖
視圖(View)是用戶可以看到并與之交互的界面。對(duì)于Web應(yīng)用來說,可以概括為HTML界面,但有可能為XHTML、XML和Applet。視圖就是由HTML元素組成的界面,HTML依舊在視圖中扮演著重要的角色,但一些新的技術(shù)已層出不窮,它們包括Macromedia Flash、XHTML、XML/XSL、WML等一些標(biāo)識(shí)語言和Web Services等。MVC有一個(gè)突出的優(yōu)點(diǎn)是能為應(yīng)用程序處理很多不同的視圖,在視圖中其實(shí)沒有真正的處理發(fā)生,不管這些數(shù)據(jù)是聯(lián)機(jī)存儲(chǔ)的還是本地儲(chǔ)存,作為視圖來講,它只是作為一種輸出數(shù)據(jù)并允許用戶操縱的方式。
模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及業(yè)務(wù)規(guī)則的制定。模型表示企業(yè)數(shù)據(jù)和業(yè)務(wù)規(guī)則。在MVC的三個(gè)部件中,模型擁有最多的處理任務(wù)。被模型返回的數(shù)據(jù)是中立的,就是說模型與數(shù)據(jù)格式無關(guān),這樣一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。業(yè)務(wù)模型還有一個(gè)很重要的模型那就是數(shù)據(jù)模型。數(shù)據(jù)模型主要指實(shí)體對(duì)象的數(shù)據(jù)保存(持續(xù)化)。
控制(Controller)可以理解為從用戶接收請(qǐng)求,將模型與視圖匹配在一起,共同完成用戶的請(qǐng)求。劃分控制層的作用也很明顯,它就是一個(gè)分發(fā)器,選擇什么樣的模型,選擇什么樣的視圖,可以完成什么樣的用戶請(qǐng)求??刂茖硬⒉蛔鋈魏蔚臄?shù)據(jù)處理。例如,用戶點(diǎn)擊一個(gè)連接,控制層接受請(qǐng)求后,并不處理業(yè)務(wù)信息,它只把用戶的信息傳遞給模型,告訴模型做什么,選擇符合要求的視圖返回給用戶。因此,一個(gè)模型可能對(duì)應(yīng)多個(gè)視圖,一個(gè)視圖可能對(duì)應(yīng)多個(gè)模型。
由此可見,在一個(gè)良好的MVC模式構(gòu)建的結(jié)構(gòu)中,Control是核心,可以作為一個(gè)核心框架來提供,基本上可以簡(jiǎn)單配置不需要任何代碼就可以運(yùn)行。而View決定了軟件展示給用于的界面,使用時(shí)的主要工作量在于擴(kuò)展點(diǎn)以及根據(jù)需要而數(shù)量不同的視圖模板。Model決定了軟件提供的功能,其內(nèi)部可能是一些普通的類或者是實(shí)現(xiàn)了某些接口的類,對(duì)于復(fù)雜的軟件可能會(huì)分成很多層,如業(yè)務(wù)邏輯層、業(yè)務(wù)提供層、系統(tǒng)提供層、數(shù)據(jù)提供層、數(shù)據(jù)訪問層等。
圖2 MvcApplication1系統(tǒng)MVC架構(gòu)示意圖
圖3 MvcApplication1系統(tǒng)MVC應(yīng)用示意圖
如圖2所示的系統(tǒng)MvcApplication1采用的是MVC架構(gòu)的設(shè)計(jì)模式,該系統(tǒng)中視圖層是Views,模型層是Models,控制層是Controllers,下面分別對(duì)這個(gè)例子做一簡(jiǎn)單介紹。
Models就是獲取的網(wǎng)頁需要的數(shù)據(jù);Controllers就是獲取數(shù)據(jù)后,將數(shù)據(jù)綁定到頁面控件的這個(gè)業(yè)務(wù)流程;Views就是aspx頁面,而且都是不包含后臺(tái)代碼文件的aspx頁面。
以Account業(yè)務(wù)為例,圖3很好的概括了MVC的作用。
一個(gè)URL請(qǐng)求,ASP.NET MVC引擎會(huì)分析這個(gè)URL要使用哪個(gè)Controller(例如示例中的AccountController),這個(gè)Controller從數(shù)據(jù)庫或者其他數(shù)據(jù)源獲取數(shù)據(jù),通常這些數(shù)據(jù)的獲取是通過業(yè)務(wù)的模型類(即MVC中的Model,例如示例中的AccountModels)。Controller將Model對(duì)象傳遞給頁面(即MVC中的View,例如示例中Account文件夾下的aspx頁面),頁面在瀏覽器中顯示出來。
綜合上述,MVC是架構(gòu)軟件非常有效的基本模式,可以將業(yè)務(wù)處理與顯示分離,將系統(tǒng)分為模型、視圖以及控制層,使得開發(fā)人員會(huì)認(rèn)真考慮系統(tǒng)的額外復(fù)雜性,同時(shí)把這些想法融入到架構(gòu)中,增加了系統(tǒng)的可拓展性。這樣MVC模式會(huì)使得軟件系統(tǒng)更加強(qiáng)壯,更加有彈性,更加有個(gè)性化。
[1]何成萬,余秋惠.MVC模型2及軟件框架Struts的研究[J].計(jì)算機(jī)工程,2002(06).
[2]周東星,李心科.基于MVC和AJAX的Web開發(fā)模型的設(shè)計(jì)與應(yīng)用[J].合肥工業(yè)大學(xué)學(xué)報(bào)(自然科學(xué)版),2008(09).
[3]劉新娥.MVC模式Struts框架構(gòu)建Web系統(tǒng)的研究與實(shí)現(xiàn)[J].電腦開發(fā)與應(yīng)用,2010(09).