摘 要:文章主要介紹了MVC設計模式的思想、處理過程和優缺點,并著重介紹了目前比較廣泛使用的實現MVC設計模式的開發框架Struts2框架,對它的實現機制以及工作流程作了詳細的分析。
關鍵詞:MVC;設計模式;Struts2;web開發
中圖分類號:TP393 文獻標識碼:A 文章編號:1006-8937(2014)9-0055-02
MVC是Model(模型)-View(視圖)-Controller(控制器)的簡稱。在MVC出現之前,在一個Web項目中,典型的模式是將模型層和控制層結合到視圖層當中,使得各層之間的耦合性非常高,這樣導致后續的維護和擴展工作極其困難,而利用MVC模式能夠很好的解決這些問題,它將一個Web項目分成3個基本的部分,以最少的耦合工作,是目前應用最廣泛的軟件設計模式之一。運用MVC模式能大大減少開發時間,讓開發人員將精力專注在主要的業務邏輯上,而界面程序員則主要專注于表現形式上,很大程度的提高開發效率,降低開發成本,提高Web應用的擴展性及維護性。
1 MVC設計模式
隨著互聯網的流行和發展,近年來,Web在企業信息化的過程中日益扮演著越來越重要的角色,很多公司將B/S體系結構作為它們的首選的開發方式,與C/S結構不同,它將數據和應用程序放在了Server(服務器)上,Client(客戶端)則運用Web瀏覽器,如果邏輯業務發生改變,只需要對服務器進行修改,而不需要對客戶端進行更改,通過這樣的分層,使得Web應用的安全、性能和擴展性得到了大大的提高。
但是現流行的Web項目開發中還存在問題,如缺乏優秀的開發框架,程序易讀性差,開發效率低、代價高等。針對這種情況,為了解決目前軟件開發中遇到的這些問題,亟需一種新的開發模式,因此MVC模式應運而生了。
1.1 MVC思想
MVC是一個設計模式,它將一個Web項目的輸入、輸出和處理分開。在交互式系統中,MVC設計模式將它分解成3個主要的部分,即模型(Model)、視圖(View)和控制器(Controller)。它們分工明確,各自處理自己的工作,各部分的功能如下:
①模型部分:模型是Web應用的核心。它代表業務數據和業務邏輯,可以為多個視圖提供數據。由于同一個Model可以被多個View重用,所以增加了Model的可重用性。
②控制器部分:控制器主要負責所有的用戶請求參數,確定應用程序的行為,決定應該調用哪個模型來處理。它是視圖和模型之間交互的工具。
③視圖部分:視圖是用戶和系統之間交流的媒介,它主要從模型中取出用戶需要的數據,同時還接受用戶的輸入,但自身不做跟業務邏輯有關的事物。視圖通過模型查詢模型的狀態,但不能對模型進行修改。視圖可以接受來自模型發出的數據更新命令,根據命令修改相應的視圖。
1.2 MVC處理過程
第一步:用戶在視圖上發出命令,控制器接收用戶的命令,同時確定調用哪個模型來處理用戶命令;第二步:模型根據用戶的命令并執行對應的邏輯業務操作,同時返回操作結果;第三步:控制器調用對應的視圖并對返回的操作結果做適當的處理,然后在視圖上顯示。
1.3 MVC設計模式的優缺點
1.3.1 MVC的優點
①耦合性低。在目前用戶需求快速變化的情況下,將View和業務層分離,如果系統的需求發生了改變,不需要改動業務層和視圖層,而只需要改變模型層,大大降低了代碼的維護工作。
②重用性高。不同的用戶視圖可以共享相同的服務器端代碼,多個視圖共享相同的模型,很大程度的增加了代碼的可重用性。
③可移植性。模型不依賴于視圖,可以把模型移植到新的平臺。而只需要在移植后的平臺上對Control(控制器)和View(視圖)作簡單的修改,無需改變模型。
1.3.2 MVC的缺點
①因為MVC將整個應用程序分層,實現機制復雜,運用它需要程序員專門去學習它的知識。所以業務簡單的應用程序會讓結構變得復雜,還會產生不必要的數據更新,使得系效率低,所以小型Web應用程序不適合MVC模式。
②View與Control之間相互依賴。視圖和控制器雖然是分開的,但是雙方卻又是緊密聯系在一起的,離開了控制器,視圖的功能受到限制,所以他們之間依賴性大。所以它們很難單獨重用。
③View對Model訪問效率低。由于模型操作的不同接口,視圖一般情況需要調用多次才能獲得所要的數據,這樣對于沒有變化的數據造成多余的訪問,降低了系統的性能。
④目前,有些比較流行工具不能很好的支持MVC模式。如果要使用這些工具來適應MVC模式,那需要付出很大的代價。
2 MVC設計模式的實現—Struts2
2.1 Struts2實現MVC的機制
Struts是一個開源項目,是典型的基于MVC的Web應用框架,在struts中,Model由javabean或EJB組成,控制器由FilterDispatcher和Action來完成,視圖由JSP文件組成。各部分功能如下:
①視圖。負責系統的視圖實現,由jsp組成。這些jsp文件只實現頁面的顯示,沒有涉及到具體的業務邏輯。
②模型。在一些大型的Web應用中,業務邏輯的實現一般讓EJB和JavaBean來完成。Struts為模型層提供了Action和ActionForm組件。
③控制器。控制器一般由Action類和FilterDispatcher類實現。FilterDispatcher類在MVC設計模式中主要起到中央控制器的作用,它接受來自用戶的HTTP請求的信息,根據struts.xml,把信息發送到相應的Action,如果相應的操作對象找不到,那么FilterDispatcher負責創建相應的對象。
④Struts的配置文件struts.xml。Struts.xml是struts的默認配置文件。主要實現View與model之間的對應關系。
2.2 Struts2的工作流程
采用Struts框架的應用程序,在服務啟動之前,會加載并初始化FilterDispatcher。它接收到一個請求時,將執行以下步驟:
①第一步是搜索和用戶請求相對應的Action,如果沒有搜索到,系統將先創建這個實例。
②第二步是用第一步中對應的方法來調用模型中的有關組件來處理業務邏輯,并返回一個字符串,表示下一步負責處理請求的模板組件的邏輯名稱。
③第三步是FilterDispatcher從Struts配置文件中獲取和Action的對應方法返回邏輯名字對應的實際URL,然后再把請求轉發給目標組件。如果這個目標組件是jsp文件,這個jsp文件就會把包含了響應結果的視圖展現給用戶。
3 結 語
一個成功的應用軟件不僅在良好的技術支持,還需要有成功的模式和框架予以指導。MVC設計模式作為一種框架模式在web開發應用當具有重要的意義,它具有獨特的優勢,通過將View(表示層)、Service(業務層)和Action(控制層)分離,降低了每個層間的耦合度,降低了各層之間的依賴,提高了系統的可維護性和重用性。
參考文獻:
[1] 吳剛珂,倪紅美.基于瀏覽器/服務器結構的LIS開發與應用[J].現代檢驗醫學雜志,2012,(6).
[2] 韓明.基于Struts-Spring-Hibernate的Java應用開發[M].北京:電子工業出版社,2006.
[3] 孫衛琴.精通Struts:基于MVC的Java Web設計與開發[M].北京:電子工業出版社,2004.
[4] 涂婷婷,段凡丁.MVC設計模式在B/S開發中的研究與應用[J].計算機技術與發展,2007,(5).