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