?MVC并不是Java語言所特有的設(shè)計(jì)思想,也并不是Web應(yīng)用所特有的思想翰萨,它是所有面向?qū)ο蟪绦蛟O(shè)計(jì)語言都應(yīng)該遵循的規(guī)范脏答。
MVC思想將一個(gè)應(yīng)用分成三個(gè)基本部分:Model(模型)、View(視圖)和Controller(控制器),這三個(gè)部分以最少的耦合協(xié)同工作亩鬼,從而提高應(yīng)用的可擴(kuò)展性和可維護(hù)性殖告。
?在經(jīng)典的MVC模式中,事件由控制器處理雳锋,控制器根據(jù)事件的類型改變模型或視圖黄绩,反之亦然。玷过。具體地說宝与,每個(gè)模型對(duì)應(yīng)一系列的視圖列表買這種對(duì)應(yīng)關(guān)系通常采用注冊(cè)來完成,即把多個(gè)視圖注冊(cè)到同一個(gè)模型冶匹,當(dāng)模型發(fā)生改變時(shí),模型向所有注冊(cè)過的視圖發(fā)送通知咆瘟,接下來嚼隘,視圖從對(duì)應(yīng)的模型中獲得信息,然后完成對(duì)視圖顯示的更新袒餐。
?概括起來飞蛹,MVC有如下特點(diǎn):
- 多個(gè)視圖可以對(duì)應(yīng)一個(gè)模型。按MVC設(shè)計(jì)模型灸眼,一個(gè)模型對(duì)應(yīng)多個(gè)視圖卧檐,可以減少代碼的復(fù)制及代碼的維護(hù)量,這樣焰宣,一旦模型發(fā)生改變霉囚,也易于維護(hù)。
- 模型返回的數(shù)據(jù)與顯示邏輯分離匕积。模型數(shù)據(jù)可以應(yīng)用任何的顯示技術(shù)盈罐,例如榜跌,使用JSP頁面、Velocity模板或者直接產(chǎn)生Excel文檔等盅粪。
- 應(yīng)用被分隔為三層钓葫,降低了各層之間的耦合,提供了應(yīng)用的可擴(kuò)展性票顾。
- 控制層的概念也很有效础浮,由于它把不同的模型和視圖組合在一起,完成不同的請(qǐng)求奠骄。因此豆同,控制層可以說包含了用戶請(qǐng)求權(quán)限的概念。
- MVC更符合軟件工程化管理的精神戚揭。不同層各司其職诱告,每一層的組件具有相同的特征,這有利于通過工程化和工具化的方法產(chǎn)生管理程序的代碼
?相對(duì)于早期的MVC思想民晒,Web模式下的MVC思想則有存在一些變化精居。對(duì)于一個(gè)普通的應(yīng)用程序,可以將視圖注冊(cè)給模型潜必,當(dāng)模型數(shù)據(jù)發(fā)生改變時(shí)靴姿,即時(shí)通知視圖頁面發(fā)送改變;而對(duì)于Web應(yīng)用磁滚,即使將多個(gè)JSP頁面注冊(cè)給一個(gè)模型佛吓,但當(dāng)該模型發(fā)生變化時(shí),模型也無法主動(dòng)給JSP頁面發(fā)送信息(因?yàn)閃eb應(yīng)用都是基于請(qǐng)求/響應(yīng)模式的)垂攘,只有當(dāng)用戶請(qǐng)求瀏覽該頁面時(shí)维雇,控制器才負(fù)責(zé)調(diào)用模型數(shù)據(jù)來更新JSP頁面。下圖顯示了遵循MVC模式的Java Web的運(yùn)行流程晒他。