關(guān)于BS MVC分層思想的發(fā)展概要
文章出處:http://www.luckydriving.com 作者:興邦開發(fā)部 人氣: 發(fā)表時(shí)間:2015年12月21日
今天,我們見到的絕大部分應(yīng)用,都是基于B/S(瀏覽器/服務(wù)器)架構(gòu)的,其中的服務(wù)器就是Web服務(wù)器??梢?,Web應(yīng)用是目前廣泛使用的應(yīng)用模式,但早期的Web應(yīng)用全部是靜態(tài)的HTML頁面,用于將一些文本信息呈現(xiàn)給瀏覽者,但這些信息是固定寫在HTML頁面里的,該頁面不具備與用戶交互的能力,沒有動(dòng)態(tài)顯示的功能。
很自然地,人們希望Web應(yīng)用里應(yīng)該包含一些能動(dòng)態(tài)執(zhí)行的頁面,最早的CGI(通用網(wǎng)關(guān)接口)技術(shù)滿足了該要求,CGI技術(shù)使得Web應(yīng)用可以與客戶端瀏覽器交互,不再需要使用靜態(tài)的HTML頁面。CGI技術(shù)可以從數(shù)據(jù)庫讀取信息,將這些信息呈現(xiàn)給用戶;還可以獲取用戶的請求參數(shù),并將這些參數(shù)保存到數(shù)據(jù)庫里。
CGI技術(shù)開啟了動(dòng)態(tài)Web應(yīng)用的時(shí)代,給了這種技術(shù)無限的可能性。但CGI技術(shù)存在很多缺點(diǎn),其中最大的缺點(diǎn)就是開發(fā)動(dòng)態(tài)Web應(yīng)用難度非常大,而且在性能等各方面也存在限制。到1997年時(shí),隨著Java語言的廣泛使用,Servlet技術(shù)迅速成為動(dòng)態(tài)Web應(yīng)用的主要開發(fā)技術(shù)。
隨著實(shí)際Web應(yīng)用的使用越來越廣泛,Web應(yīng)用的規(guī)模也越來越大,開發(fā)人員發(fā)現(xiàn)動(dòng)態(tài)Web應(yīng)用的維護(hù)成本越來越大,即使只需要修改該頁面的一個(gè)簡單按鈕文本,或者一段靜態(tài)的文本內(nèi)容,也不得不打開混雜的動(dòng)態(tài)腳本的頁面源文件進(jìn)行修改——這是一種很大的風(fēng)險(xiǎn),完全有可能引入新的錯(cuò)誤。
這個(gè)時(shí)候,人們意識(shí)到:使用單純的ASP,或者JSP頁面充當(dāng)過多角色是相當(dāng)失敗的選擇,這對于后期的維護(hù)相當(dāng)不利。慢慢地開發(fā)人員開始在Web開發(fā)中使用MVC模式。
MVC思想將一個(gè)應(yīng)用分成三個(gè)基本部分:Model(模型)、View(視圖)和Controller(控制器),這三個(gè)部分以最少的耦合協(xié)同工作,從而提高應(yīng)用的可擴(kuò)展性及可維護(hù)性。
在經(jīng)典的MVC模式中,事件由控制器處理,控制器根據(jù)事件的類型改變模型或視圖,反之亦然。具體地說,每個(gè)模型對應(yīng)一系列的視圖列表,這種對應(yīng)關(guān)系通常采用注冊來完成,即:把多個(gè)視圖注冊到同一個(gè)模型,當(dāng)模型發(fā)生改變時(shí),模型向所有注冊過的視圖發(fā)送通知,接下來,視圖從對應(yīng)的模型中獲得信息,然后完成視圖顯示的更新。
從設(shè)計(jì)模式的角度來看,MVC思想非常類似于一個(gè)觀察者模式,但與觀察者模式存在少許差別:觀察者模式下觀察者和被觀察者可以是兩個(gè)互相對等的對象,但對于MVC思想而言,被觀察者往往只是單純的數(shù)據(jù)體,而觀察者則是單純的視圖頁面。
概括起來,MVC有如下特點(diǎn) :
— 多個(gè)視圖可以對應(yīng)一個(gè)模型。按MVC設(shè)計(jì)模式,一個(gè)模型對應(yīng)多個(gè)視圖,可以減少代碼的復(fù)制及代碼的維護(hù)量,一旦模型發(fā)生改變,也易于維護(hù)。
— 模型返回的數(shù)據(jù)與顯示邏輯分離。模型數(shù)據(jù)可以應(yīng)用任何的顯示技術(shù),例如,使用JSP頁面、Velocity模板或者直接產(chǎn)生Excel文檔等。
— 應(yīng)用被分隔為三層,降低了各層之間的耦合,提供了應(yīng)用的可擴(kuò)展性。
— 控制層的概念也很有效,由于它把不同的模型和不同的視圖組合在一起,完成不同的請求。因此,控制層可以說是包含了用戶請求權(quán)限的概念。
— MVC更符合軟件工程化管理的精神。不同的層各司其職,每一層的組件具有相同的特征,有利于通過工程化和工具化產(chǎn)生管理程序代碼。