- Java EE項目應用開發
- 劉勇軍 王電鋼編著
- 2148字
- 2018-12-30 08:37:20
1.3 MVC設計模式
1.3.1 MVC設計模式
MVC是一種設計模式,它是軟件設計中的典型結構之一。MVC是Model View Control的縮寫。在這種設計結構下,應用程序分為3個組成部分:Model模型、View視圖和Controller控制器,每個部分負責不同的功能,如圖1-16所示。

圖1-16 MVC設計模式
● V:View
View是指用戶界面,也就是用戶與應用程序交互的接口。視圖向用戶顯示相關的數據,并能接收用戶的輸入數據,但是它并不進行任何實際的業務處理。視圖可以向模型查詢業務狀態,但不能改變模型。視圖還能接收模型發出的數據更新事件,從而對用戶界面進行同步更新。
● M:Model
Model提供應用業務邏輯,是指對業務邏輯、業務信息的處理模塊,包括對業務數據的存取、加工、綜合等。一個模型能為多個視圖提供數據,由于同一個模型可以被多個視圖重用,所以提高了應用的可重用性。
● C:Controller
Controller則負責View和Model之間的流程控制。一方面,它將用戶在界面上的操作抽象成系統能理解的對象,轉換成對Model的特定方法的調用,來完成具體的業務邏輯;另一方面,它將Model處理完的業務數據及時反應到用戶界面上,以便用戶瀏覽。
顯而易見,MVC架構使應用程序的結構更加清晰,通過將代碼按照層次劃分為業務邏輯/數據層、用戶界面和應用流程控制這三個層次,能夠增強代碼的穩定性。
對于Model、View、Controller這三部分功能來講,View的實現一般是由界面設計人員和界面程序員來完成,Model則是由業務邏輯程序員來完成,Controller則一般由負責整體控制的程序員來完成。對于項目開發而言,三層的分離有利于在項目小組內按照小組成員各自的擅長進行分工,有利于三個部分并行開發、加快項目進度。
另一方面,通常來講,Controller部分的代碼比較穩定,一般會實現一個通用的架構;而Model則跟隨商務流程的變化而變化;View的更改則是隨著用戶需求的更改而更改。這種模塊功能的劃分有利于在代碼修改過程中進行模塊的隔離,避免不同功能的代碼混雜在一起造成混亂。
1.3.2 Java EE與MVC
在Java EE體系架構中,其多層應用很好地體現了MVC思想:使用JavaBean或EJB提供應用業務邏輯,實現Model;使用HTML頁面、JSP頁面等實現面向瀏覽器的數據表現,使用Application Client實現了面向桌面應用的數據表現,也就是View;控制器Controller則是由Servlet承擔,由它來提供業務流程控制。如圖1-17所示為Java EE架構與MVC設計思想的結合。

圖1-17 Java EE與MVC
1.3.3 Web開發模式
盡管MVC設計模式很早就出現了,但在Web應用的開發中引入MVC步履維艱。主要原因是在早期的Web應用的開發中,程序語言和HTML的分離一直難以實現。例如在JSP網頁中執行業務邏輯的程序代碼和HTML表示層數據混雜在一起,因而很難分離出單獨的業務模型。這使得維護JSP網頁非常困難,很難滿足用戶的變化性需求。
1.JSP Model
在早期的基于Java EE的Web應用中,JSP文件負責業務邏輯、控制網頁流程并創建HTML, JSP文件是一個獨立的、自主完成所有任務的模塊,稱為JSP Model開發模式,體系結構如圖1-18所示。

圖1-18 JSP Model
很顯然,JSP Model開發模式會給Web開發帶來以下一系列問題。
● HTML代碼和Java程序強耦合在一起:JSP文件的編寫者必須既是網頁設計者,又是Java開發者。實際情況是多數Web開發人員要么只精通網頁設計,能夠設計出漂亮的網頁外觀,但是編寫的Java代碼很糟糕;要么僅熟悉Java編程,能夠編寫穩固的Java代碼,但是設計的網頁外觀很難看。
● 內嵌的流程邏輯:要理解應用程序的整個流程,必須瀏覽所有網頁。如果有幾百個網頁呢?
● 測試困難:除了很糟的外觀之外,HTML標記、Java代碼和JavaScript代碼都集中在一個網頁上,使測試變得相當困難。
● 強耦合:更改業務邏輯或數據可能牽涉相關的多個網頁。
為了解決以上問題,Sun公司先后制定了兩種規范:JSP Model1和JSP Model2。
2.JSP Model1
JSP Model1體系結構結合使用JSP頁面和JavaBean來開發基于Java EE的Web應用程序。JSP Model1體系結構如圖1-19所示。

圖1-19 JSP Model1體系結構
Model1使用JSP+JavaBean將頁面顯示和業務邏輯處理分開,JavaBean對象用來保存數據和實現商業邏輯,它充當模型,而JSP負責響應用戶請求并將處理結果返回用戶,JSP既要負責業務流程控制,又要負責提供表示層數據,同時充當視圖和控制器。
Model1最大的特點就是將一次請求的響應過程完全交給一個JSP頁面負責,其典型的應用就是讓創建表單的JSP頁面同時負責處理該表單提交的請求,也就是JSP頁面既要負責輸出創建表單的HTML代碼,又要處理表單提交的數據。
很顯然,Model1體系結構未能完全實現MVC模式中模塊之間的獨立和分離,盡管它十分適合簡單應用的需要,卻不適合開發復雜的大型應用程序。不加選擇地隨意運用JSP Model1模式,會導致JSP頁面內嵌入大量的Java代碼。盡管這對于Java程序員來說可能不是什么大問題,但如果JSP頁面是由網頁設計人員開發并維護的,這確實是個問題。從根本上講,將導致角色定義不清和職責分配不明,給項目管理帶來很多麻煩。
3.JSP Model2
JSP Model2體系結構借鑒了MVC設計模式來實現顯示內容和業務邏輯的完全分離,它綜合采用JSP+Servlet+JavaBean技術來開發基于Java EE的Web應用程序。JSP Model2體系結構如圖1-20所示。

圖1-20 JSP Model2體系結構
JSP Model2開發模式是一種聯合使用JSP與Servlet來提供動態內容的方法。它吸取了JSP和Servlet兩種技術各自的突出優點,用JSP生成表示層和內容,讓Servlet完成深層次的處理任務。在這里,Servlet充當控制器的角色,負責處理用戶請求,創建JSP頁面需要使用的JavaBean對象,根據用戶請求選擇合適的JSP頁返回給用戶。在JSP頁中沒有處理邏輯,它僅負責檢索原先由Servlet創建的JavaBean對象,從Servlet中提取動態內容插入到靜態模板。這是一種有突破性的軟件設計方法,它清晰地分離了表達和內容,明確了角色定義及開發者與網頁設計者的分工。事實上,項目越復雜,使用JSP Model2開發模式的好處就越大。
- C++程序設計(第3版)
- TypeScript入門與實戰
- 數據庫系統教程(第2版)
- iOS 9 Game Development Essentials
- Instant Zepto.js
- 微信公眾平臺開發:從零基礎到ThinkPHP5高性能框架實踐
- Unity 5 for Android Essentials
- Scala編程實戰(原書第2版)
- BeagleBone Black Cookbook
- Practical Game Design with Unity and Playmaker
- JavaScript應用開發實踐指南
- Spring技術內幕:深入解析Spring架構與設計原理(第2版)
- Spring 5 Design Patterns
- 并行編程方法與優化實踐
- 青少年學Python(第2冊)