【J2EE】:MVC模式的簡介與分析

連江偉發表於2016-03-12

MVC全名是Model View Controller,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中。


MVC並不是Java語言所特有的設計思想,也不是Web應用所特有的思想,它是所有物件導向程式設計語言都應該遵循的規範。


MVC思想將一個應用分為三個基本部分:Model(模型)、View(檢視)和Controller(控制器),這三個部分以最少的耦合協同工作,從而提高應用程式的可擴充套件性及可維護性。MVC體系結構如下:
 
        模型層負責表達和訪問商業資料,執行商業邏輯和操作。也就是說,這一層就是現實生活中功能的軟體模擬;在模型層變化的時候,它將通知檢視層並提供後者訪問自身狀態的能力,同時控制層也可以訪問其功能函式以完成相關的任務。

        檢視層負責顯示模型層的內容。它從模型層取得資料並指定這些資料如何被顯示出來。在模型層變化的時候,它將自動更新。另外檢視層也會將使用者的輸入傳送給控制器。

        控制層負責定義應用程式的行為。它可以分派使用者的請求並選擇恰當的檢視以用於顯示,同時它也可以解釋使用者的輸入並將它們對映為模型層可執行的操作;在一個圖形介面中,常見的使用者輸入包括點選按鈕和選單選擇。在Web應用中,它包括對Web層的HTTP GET和POST的請求;控制層可以基於使用者的互動和模型層的操作結果來選擇下一個可以顯示的檢視,一個應用程式通常會基於一組相關功能設定一個控制層的模組,甚至一些應用程式會根據不同的使用者型別具有不同的控制層設定,這主要是由於不同使用者的檢視互動和選擇也是不同的。


        在模型層、檢視層和控制層之間劃分責任可以減少程式碼的重複度,並使應用程式維護起來更簡單。同時由於資料和商務邏輯的分開,在新的資料來源加入和資料顯示變化的時候,資料處理也會變得更簡單。


        概括起來,MVC具有如下優勢:


1 多個檢視可以對應一個模型。按MVC設計模式,一個模型對應多個檢視,可以減少程式碼的複製和程式碼的維護量,一旦模型發生改變,也易於維護。


2 模型返回的資料與顯示邏輯分離。模型資料可以應用任何的顯示技術,例如:使用JSP頁面、Velocity模板或者直接產生Excel文件等。


3 應用被分隔為三層,降低了各層之間的耦合,提供了應用的可擴充套件性。


4 控制層的概念也很有效,由於它把不同的模型和不同的檢視組合在一起,完成不同的請求。因此,控制層可以說是包含了使用者請求許可權的概念。


5 MVC更符合軟體工程化管理的思想。不同的層各司其職,每一層的元件具有相同的特徵,有利於通過工程化和工具化產生管理程式程式碼。


但是,任何事物都有兩面性,MVC也不例外,那麼它有什麼不好的地方呢?


1 增加了系統結構和實現的複雜性。對於簡單的介面,嚴格遵循MVC,使模型、檢視和控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低執行效率。


2 檢視與控制器間的過於緊密的連線。檢視與控制器是相互分離,但確實聯絡緊密的部件,檢視沒有控制器的存在,其應用是非常有限的,反之亦然,這樣就妨礙了他們的獨立重用。


3 檢視對模型資料的低效率訪問。依據模型操作介面的不同,檢視可能需要多次呼叫才能獲得足夠的顯示資料。對未變化資料的不必要的頻繁訪問,也將損害操作效能。


小結一下:


從設計模式的角度來看,MVC思想非常類似於觀察者模式,但是與觀察者模式存在少許差別:觀察者模式下觀察者和被觀察者可以是兩個互相對等的物件,但對於MVC思想而言,被觀察者往往只是單純的資料體,而觀察者則是單純的檢視頁面。

經典的MVC思想與Web應用的MVC思想也存在一定的差別,主要原因是因為Web應用是一種請求/響應模式下應用,對於請求/響應應用,如果使用者不對應用發出請求,檢視自身是無法主動更新自己的。

相關文章