陳亞莉
一、MVC設(shè)計(jì)模型組成
“MVC”(Model-View-Controller)由Trygve Reenskaug提出,首先被應(yīng)用在SmallTalk-80環(huán)境中,是許多交互和界面系統(tǒng)的構(gòu)成基礎(chǔ)。MVC作為一種開(kāi)發(fā)模型,通常用于分布式應(yīng)用系統(tǒng)的設(shè)計(jì)和分析中,以及用于確定系統(tǒng)各部分間的組織關(guān)系。對(duì)于界面設(shè)計(jì)可變性的需求,MVC把交互系統(tǒng)的組成分解成模型、視圖、控制器三種部件。
模型(Model)部件保存由視圖顯示,由控制器控制的數(shù)據(jù);它封裝了問(wèn)題的核心數(shù)據(jù)、邏輯和功能的計(jì)算關(guān)系,它獨(dú)立于具體的界面表達(dá)和I/0操作。視圖(View)部件把表示模型數(shù)據(jù)及邏輯關(guān)系和狀態(tài)的信息以特定形式展示給用戶。它從模型獲得顯示信息,對(duì)于相同的信息可以有多個(gè)不同的顯示形式或視圖。
控制器部件是處理用戶與軟件的交互操作的,其職責(zé)是控制提供模型中任何變化的傳播,確保用戶界面于模型間的對(duì)應(yīng)聯(lián)系;它接受用戶的輸入,將輸入反饋給模型,進(jìn)而實(shí)現(xiàn)對(duì)模型的計(jì)算控制,是使模型和視圖協(xié)調(diào)工作的部件。
二、MVC設(shè)計(jì)模式在ASP.NET中的實(shí)現(xiàn)
ASP.NET提供了一個(gè)很好的實(shí)現(xiàn)這種經(jīng)典設(shè)計(jì)模式的類似環(huán)境。開(kāi)發(fā)者通過(guò)在ASPX頁(yè)面中開(kāi)發(fā)用戶接口來(lái)實(shí)現(xiàn)視圖;控制器的功能在邏輯功能代碼(.cs)中實(shí)現(xiàn);模型通常對(duì)應(yīng)應(yīng)用系統(tǒng)的業(yè)務(wù)部分。
視圖是模型的表示,它提供用戶交互界面。在ASP.NET下,視圖的實(shí)現(xiàn)很簡(jiǎn)單。可以像開(kāi)發(fā)WINDOWS界面一樣直接在集成開(kāi)發(fā)環(huán)境下通過(guò)拖動(dòng)控件來(lái)完成頁(yè)面開(kāi)發(fā)本。視圖部分處理流程:首先,頁(yè)面模板定義了頁(yè)面的布局:頁(yè)面配置文件定義視圖標(biāo)簽的具體內(nèi)容;然后,由頁(yè)面布局策略類初始化并加載頁(yè)面;每個(gè)用戶部件根據(jù)它自己的配置進(jìn)行初始化,加載校驗(yàn)器并設(shè)置參數(shù),以及事件的委托等;用戶提交后,通過(guò)了表示層的校驗(yàn),用戶部件把數(shù)據(jù)自動(dòng)提交給業(yè)務(wù)實(shí)體即模型。
為了能夠控制和協(xié)調(diào)每個(gè)用戶跨越多個(gè)請(qǐng)求的處理,控制機(jī)制應(yīng)該以集中的方式進(jìn)行管理。因此,為了達(dá)到集中管理的目的引入了控制器。應(yīng)用程序的控制器集中從客戶端接收請(qǐng)求(典型情況下是一個(gè)運(yùn)行瀏覽器的用戶),決定執(zhí)行什么商業(yè)邏輯功能,然后將產(chǎn)生下一步用戶界面的責(zé)任委派給一個(gè)適當(dāng)?shù)囊晥D組件。
控制器提供一個(gè)控制和處理請(qǐng)求的集中入口點(diǎn),它負(fù)責(zé)接收、截取并處理用戶請(qǐng)求;并將請(qǐng)求委托給分發(fā)者類,根據(jù)當(dāng)前狀態(tài)和業(yè)務(wù)操作的結(jié)果決定向客戶呈現(xiàn)的視圖。在這一部分主要定義了HttpReqDispatcher(分發(fā)者類)、HttpCapture(請(qǐng)求捕獲者類)、Controller(控制器類)等,它們相互配合來(lái)完成控制器的功能。請(qǐng)求捕獲者類捕獲HTTP請(qǐng)求并轉(zhuǎn)發(fā)給控制器類??刂破黝愂窍到y(tǒng)中處理所有請(qǐng)求的最初入口點(diǎn)??刂破魍瓿梢恍┍匾奶幚砗蟀颜?qǐng)求委托給分發(fā)者類;分發(fā)者類分發(fā)者負(fù)責(zé)視圖的管理和導(dǎo)航,它管理將選擇哪個(gè)視圖提供給用戶,并提供給分發(fā)資源控制。在這一部分分別采用了分發(fā)者、策略、工廠方法、適配器等設(shè)計(jì)模式。
MVC系統(tǒng)中的模型從概念上可以分為兩類——系統(tǒng)的內(nèi)部狀態(tài)和改變系統(tǒng)狀態(tài)的動(dòng)作。模型是你所有的商業(yè)邏輯代碼片段所在。
三、MVC模式的優(yōu)缺點(diǎn)
1、MVC模式的優(yōu)點(diǎn)
通過(guò)在ASP.NET中的MVC模式編寫的,具有極其良好的可擴(kuò)展性。它可以輕松實(shí)現(xiàn)以下功能:①實(shí)現(xiàn)一個(gè)模型的多個(gè)視圖;②采用多個(gè)控制器;③當(dāng)模型改變時(shí),所有視圖將自動(dòng)刷新;④所有的控制器將相互獨(dú)立工作。
2、MVC模式的不足
①增加了系統(tǒng)結(jié)構(gòu)和實(shí)現(xiàn)的復(fù)雜性。對(duì)于簡(jiǎn)單的界面,嚴(yán)格遵循Mvc,使模型、視圖與控制器分離,會(huì)增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過(guò)多的更新操作,降低運(yùn)行效率。
②視圖與控制器間的過(guò)于緊密的連接。視圖與控制器是相互分離,但確實(shí)聯(lián)系緊密的部件,視圖沒(méi)有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨(dú)立重用。
③視圖對(duì)模型數(shù)據(jù)的低效率訪問(wèn)。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對(duì)未變化數(shù)據(jù)的不必要的頻繁訪問(wèn),也將損害操作性能。
四、結(jié)束語(yǔ)
與軟件所處理問(wèn)題的內(nèi)在模型相比較,用戶界面是需要經(jīng)常發(fā)生變化的,采用MVC設(shè)計(jì)模式可以在滿足對(duì)界面要求的同時(shí),使軟件的計(jì)算模型獨(dú)立于界面的構(gòu)成。也可以基于此模型建立大型分布式應(yīng)用程序框架。
作者單位:湖南科技職業(yè)學(xué)院