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