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