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