基於MVC設計模式的WEB應用框架研究~~轉
阿新 • • 發佈:2019-02-13
MVC設計模式是基於J2EE的WEB應用開發的首選模式,當前許多流行的框架也都是基於MVC設計模式的。本文簡要介紹了MVC設計模式和Struts框架,並提出了一種基於MVC模式的新型WEB應用開發框架——WebFramework,並對該框架的各個層次的組成、功能進行了詳細的描述。
關鍵詞 MVC設計模式; J2EE;框架; Struts
引言
隨著開源軟體的興起,各種框架也紛紛出現,如Apache 的開源框架Struts就是典型的代表。在實際軟體開發中運用這些框架,大大降低了J2EE開發的複雜度和難度,降低了開發成本。但是這些框架也有不足的地方,如難於掌握,配置複雜等等。本文研究的目的在於設計出一種簡單易行的WEB開發框架——WebFramework,WebFramework結構清晰,易於理解,增加系統的可擴充套件性,可維護性,降低開發成本。
MVC設計模式
基於J2EE的WEB應用系統,多數都利用MVC模式來實現其體系結構。MVC(Model-View-Controller)是八十年代為程式語言Smalltalk-80發明的一種軟體設計模式。MVC模式將互動式應用分成模型(Model)、檢視(View)和控制器(Controller)三部分[1]。模型是指從現實世界中挖掘出來的物件模型,是應用邏輯的反映。模型封裝了資料和對資料的操作,是實際進行資料處理的計算的地方。檢視是應用和使用者之間的介面,它負責將應用顯現給使用者和顯示模型的狀態。控制器負責檢視和模型之間的互動,控制對使用者輸入的響應響應方式和流程,它主要負責兩方面的動作:把使用者的請求分發到相應的模型;將模型的改變及時反應到檢視上。MVC將這些物件分離以提高靈活性和複用性。MVC模式的結構如圖1所示:
Struts框架
Struts是Apache基金會Jakarta專案組的一個Open Source專案,它將Servlet2.2和JSP1.1標記用作實現的一部分,它由一組相互協作的類、servlet和JSP標記,組成一個可重用的系統設計。它能夠很好地幫助Java開發者利用J2EE開發WEB應用。它將設計模式中“分離顯示邏輯與業務邏輯”的能力發揮的淋漓盡致。因此,越來越多的大型的WEB應用專案的開發都紛紛採用Struts框架,或者借鑑Struts架構設計,進行基於MVC模式的應用系統的開發。
Struts的工作原理如圖2所示:
Struts的優點主要體現在兩個方面:表單驗證和頁面導航。表單驗證解決了請求資料的驗證問題,增強了系統健壯性。而頁面導航使系統的業務流程脈絡清晰,系統各部分之間的聯絡可以通過配置檔案反映出來,從而在一定程度上簡化了系統以後的維護工作。
但是Struts也存在一些不足:
1)陡峭的學習曲線。Taglib是Struts的標記庫,如果能靈活運用,能大提高開發效率,但對初學者來說,卻需要一個持續學習的過程,增加了系統的開發成本。
2)增加了系統的複雜度。業務層和表現層之間的耦合度太高,使得開發人員無法專注於表現層的設計和實現。
3)沒有對錶單資料前端驗證提出方案,不利於在大型系統中使用。
4)配置檔案過於複雜繁索,隨著系統規模的增大,struts-config.xml越來越龐大,維護也變得越來越困難。
WebFramework框架
針對Struts框架的以上不足之處,本文提出WebFramework框架,與Struts框架相比,WebFramework更簡單易行,它通過簡化表現層的設計,降低開發難度,節約開發成本;使用VO(Value Object)作為資料傳遞的方式,降低系統複雜度;運用簡單的瀏覽器端表單欄位資料驗證,提高系統的執行效率;簡化的配置檔案,便於系統的維護。
設計目標
遵循J2EE規範,基於多層分散式應用軟體開發框架,分散式的層次構架方式可以提高軟體系統效能上的可擴充套件性,從長期的角度上保障了客戶對當前的軟體投資;實現軟體系統在異常情況下也可以正常地提供服務,提高軟體系統的穩定性;各個構架層次邏輯分離,有利於軟體開發過程中團隊成員的協同工作,提高生產效率。
2、框架結構
在設計策略中,將軟體系統從構架上分為資料層、業務邏輯層和表示層,主要集中在業務表示與業務邏輯層。將普通三層架構的表示層細分成檢視格式層和表示控制邏輯層。表示層涉及基於“瘦客戶”技術的使用者檢視格式伺服器端表示和相應的互動式控制邏輯。檢視格式層,只保留了構建客戶端使用者檢視必要的顯示格式和事件觸發;而在表示控制邏輯層則如名稱所描述的那樣,實現了人機互動所需控制邏輯和部分業務會話邏輯,再加上貫穿所有系統邏輯層的業務實體,則構成了以MVC模式為核心的表示層架構,將顯示格式、顯示控制邏輯、模型資料三部分有效地分隔開來,大大加強了系統架構的可擴充套件性和應用子系統的可插拔性。
業務層細分成業務會話層和業務持久化層。業務層集中在業務流程中處理邏輯的元件化封裝,且與資料層平臺和外部系統無關。業務會話層,側重於業務活動,將一項業務的所有活動事務性地封裝起來,也確保業務流程處理的一致性和高效率;而業務持久化層則是為業務會話層提供支援,提供業務資料的持久化操作,在業務與資料庫之間建立分離作用的中間層,構成鬆耦合的架構。
本分層模型中實現了MVC設計模式。其中,Servlet元件對應於MVC中的控制器(Controller)部分,JSP及Browser對應於檢視(View)部分,而會話外觀、邏輯Bean及值物件則對應於模型(Model)部分。其結構圖3所示:
2.1、資料層
(1)層定義
資料層對資料進行管理,並向業務邏輯層提供標準化的開放訪問介面。
資料層目前主要提供兩種形式的服務方式:資料庫方式和檔案方式。資料庫主要提供業務操作資料等具有明顯結構化特性的資料的儲存和訪問服務;檔案主要提供包括掃描文件影象、傳真、照片、計算機生成的報告、字處理文件、電子表格、簡報、語音和視訊片段等非結構化資料的儲存和訪問服務。
主要功能:資料建立、資料儲存、資料查詢、資料更新、資料刪除、資料安全、事務支援、資料備份/恢復。
(2)與其他層介面
1)資料庫方式的資料層面向業務邏輯層提供資料庫訪問服務介面,業務邏輯層通過JDBC協議訪問資料庫服務。
2)檔案方式的資料層面向業務邏輯層提供檔案級的訪問服務介面,業務邏輯層通過作業系統本身提供的檔案訪問API訪問檔案資料。
2.2 業務邏輯層
(1)層定義
業務邏輯層接受從表示層輸入的使用者請求,將其轉化為業務邏輯過程能夠理解的方式,根據特定的業務邏輯有序地向資料層傳送資料請求,並將資料層返回的資料解釋及組合成使用者所需資訊,返回給表示層,是整個應用軟體系統中業務邏輯的實現和處理核心。業務邏輯層執行在基於J2EE應用伺服器的EJB及WEB容器中。
(2)元件定義
業務邏輯層包含會話外觀(Session Fa?ade)、邏輯Bean(Logic Bean)和和資料存取Bean(Data Access Bean)等三個邏輯元件。
1)會話外觀
提供了面向表示層的統一的業務邏輯呼叫介面;是資料存取事務的邊界,所有資料存取事務都由會話外觀進行管理,即會話外觀負責資料存取事務的開始和關閉。
業務邏輯完成方式:通過呼叫邏輯Bean實現業務邏輯。
2)邏輯Bean
提供了業務邏輯具體實現;具有可複用性:可以直接被會話外觀呼叫,實現會話外觀所需的業務邏輯;可以被其他邏輯Bean呼叫,此時此邏輯Bean作為一個更復雜的業務邏輯的一個組成部分。
業務邏輯完成方式:可以通過呼叫其他的邏輯Bean實現相對複雜的業務邏輯;可以直接呼叫資料存取Bean完成相對簡單的業務邏輯。
3)資料存取Bean
提供了資料層的訪問介面;不負責管理事務,它只是被動的使用呼叫者傳入的事務環境;與資料庫表的對映方式,通常採取單個數據表對應單個數據存取Bean的對映方式,由單個數據存取Bean包含對應單個數據表的所有相關資料訪問操作。
4)值物件
包含業務邏輯實體的屬性,不包括業務邏輯實體的操作;是表示層和業務邏輯層資料交換的主體單元,和會話外觀一同組成了完整的業務邏輯實體,提供了業務邏輯層面向表示層的統一介面;與資料庫表的對映方式,通常採取單個數據表對應單個值物件的對映方式;可以與不同型別值物件以聚合方式組成新的值物件。
(3)與其他層介面
1)由會話外觀提供面向表示層的業務邏輯呼叫介面,表示層通過Java本地呼叫訪問業務邏輯層。
2)資料存取Bean通過JDBC訪問資料庫服務。
3)資料存取Bean通過作業系統提供的系統服務訪問檔案資料。
2.3 表示層
(1)層定義
表示層接受使用者提交的輸入請求,通過對業務邏輯層的訪問,獲得並向用戶輸出視覺化響應。
(2)元件定義
採用MVC設計模式,由Servlet提供頁面請求和請求響應的總體控制,JSP和瀏覽器提供請求結果響應的視覺化顯示。
1)Servlet
接收所有使用者由通過瀏覽器提交的業務請求,併合成相應的值物件,訪問業務邏輯層完成業務邏輯實體的業務處理;將業務邏輯實體的變化以值物件的方式通知並轉向相應的JSP。
2)JSP
根據Servlet告知的值物件,合成請求響應結果的最終輸出格式化文字(HTML);將合成格式化文字以網路協議的方式傳送給提交業務請求的使用者瀏覽器。
3)瀏覽器
提供使用者輸入業務請求資料的輸入介面,資料驗證通過後提交業務請求;接收業務請求響應的HTML文字,將業務請求響應結果以視覺化的訪問呈現給使用者。
4)WebService
是業務邏輯層對外部系統提供服務的邊界和介面,完成和外部系統的整合和互動。
(3)與其他層介面
1)Servlet通過Java本地呼叫訪問業務邏輯層。
2)瀏覽器通過HTTP/HTTPS協議向表示層提出業務請求並接收表示層的業務響應。
3、框架的配置檔案
(1)系統初始化配置檔案:web.xml
該檔案是Controller專屬的配置資訊檔案。控制器在第一次啟動時需要從這個檔案載入系統的配置資訊。檔案內容如下:
(2)頁面導航配置檔案:web_config.xml
web_config.xml檔案是整個框架的重要部分,它控制了系統執行時的執行流程。該檔案包括兩種元素:<forwards>和<action-mappings>,其中<forwards>元素用來設定當前要轉向呼叫的JSP頁面,而<action-mappings>則設定了當前使用者提交的操作要呼叫哪一個Action 類,及當前類中的哪個方法。
總結
WebFramework框架已經在一個航運管理專案中經過測試和檢驗,實踐證明,此框架在中大型專案開發中,可以縮短開發週期,提高開發效率,系統執行穩定,易於維護。
有關應用開發框架的研究是一個不斷深入,逐步完善的過程,在對WebFramework不斷推廣試用的基礎上,還將進一步擴充套件其功能,使其應用領域更加廣泛。
關鍵詞 MVC設計模式; J2EE;框架; Struts
引言
隨著開源軟體的興起,各種框架也紛紛出現,如Apache 的開源框架Struts就是典型的代表。在實際軟體開發中運用這些框架,大大降低了J2EE開發的複雜度和難度,降低了開發成本。但是這些框架也有不足的地方,如難於掌握,配置複雜等等。本文研究的目的在於設計出一種簡單易行的WEB開發框架——WebFramework,WebFramework結構清晰,易於理解,增加系統的可擴充套件性,可維護性,降低開發成本。
MVC設計模式
基於J2EE的WEB應用系統,多數都利用MVC模式來實現其體系結構。MVC(Model-View-Controller)是八十年代為程式語言Smalltalk-80發明的一種軟體設計模式。MVC模式將互動式應用分成模型(Model)、檢視(View)和控制器(Controller)三部分[1]。模型是指從現實世界中挖掘出來的物件模型,是應用邏輯的反映。模型封裝了資料和對資料的操作,是實際進行資料處理的計算的地方。檢視是應用和使用者之間的介面,它負責將應用顯現給使用者和顯示模型的狀態。控制器負責檢視和模型之間的互動,控制對使用者輸入的響應響應方式和流程,它主要負責兩方面的動作:把使用者的請求分發到相應的模型;將模型的改變及時反應到檢視上。MVC將這些物件分離以提高靈活性和複用性。MVC模式的結構如圖1所示:
圖1 MVC設計模式的結構 |
Struts框架
Struts是Apache基金會Jakarta專案組的一個Open Source專案,它將Servlet2.2和JSP1.1標記用作實現的一部分,它由一組相互協作的類、servlet和JSP標記,組成一個可重用的系統設計。它能夠很好地幫助Java開發者利用J2EE開發WEB應用。它將設計模式中“分離顯示邏輯與業務邏輯”的能力發揮的淋漓盡致。因此,越來越多的大型的WEB應用專案的開發都紛紛採用Struts框架,或者借鑑Struts架構設計,進行基於MVC模式的應用系統的開發。
Struts的工作原理如圖2所示:
圖2 Struts 的工作原理 |
Struts的優點主要體現在兩個方面:表單驗證和頁面導航。表單驗證解決了請求資料的驗證問題,增強了系統健壯性。而頁面導航使系統的業務流程脈絡清晰,系統各部分之間的聯絡可以通過配置檔案反映出來,從而在一定程度上簡化了系統以後的維護工作。
但是Struts也存在一些不足:
1)陡峭的學習曲線。Taglib是Struts的標記庫,如果能靈活運用,能大提高開發效率,但對初學者來說,卻需要一個持續學習的過程,增加了系統的開發成本。
2)增加了系統的複雜度。業務層和表現層之間的耦合度太高,使得開發人員無法專注於表現層的設計和實現。
3)沒有對錶單資料前端驗證提出方案,不利於在大型系統中使用。
4)配置檔案過於複雜繁索,隨著系統規模的增大,struts-config.xml越來越龐大,維護也變得越來越困難。
WebFramework框架
針對Struts框架的以上不足之處,本文提出WebFramework框架,與Struts框架相比,WebFramework更簡單易行,它通過簡化表現層的設計,降低開發難度,節約開發成本;使用VO(Value Object)作為資料傳遞的方式,降低系統複雜度;運用簡單的瀏覽器端表單欄位資料驗證,提高系統的執行效率;簡化的配置檔案,便於系統的維護。
設計目標
遵循J2EE規範,基於多層分散式應用軟體開發框架,分散式的層次構架方式可以提高軟體系統效能上的可擴充套件性,從長期的角度上保障了客戶對當前的軟體投資;實現軟體系統在異常情況下也可以正常地提供服務,提高軟體系統的穩定性;各個構架層次邏輯分離,有利於軟體開發過程中團隊成員的協同工作,提高生產效率。
2、框架結構
在設計策略中,將軟體系統從構架上分為資料層、業務邏輯層和表示層,主要集中在業務表示與業務邏輯層。將普通三層架構的表示層細分成檢視格式層和表示控制邏輯層。表示層涉及基於“瘦客戶”技術的使用者檢視格式伺服器端表示和相應的互動式控制邏輯。檢視格式層,只保留了構建客戶端使用者檢視必要的顯示格式和事件觸發;而在表示控制邏輯層則如名稱所描述的那樣,實現了人機互動所需控制邏輯和部分業務會話邏輯,再加上貫穿所有系統邏輯層的業務實體,則構成了以MVC模式為核心的表示層架構,將顯示格式、顯示控制邏輯、模型資料三部分有效地分隔開來,大大加強了系統架構的可擴充套件性和應用子系統的可插拔性。
業務層細分成業務會話層和業務持久化層。業務層集中在業務流程中處理邏輯的元件化封裝,且與資料層平臺和外部系統無關。業務會話層,側重於業務活動,將一項業務的所有活動事務性地封裝起來,也確保業務流程處理的一致性和高效率;而業務持久化層則是為業務會話層提供支援,提供業務資料的持久化操作,在業務與資料庫之間建立分離作用的中間層,構成鬆耦合的架構。
本分層模型中實現了MVC設計模式。其中,Servlet元件對應於MVC中的控制器(Controller)部分,JSP及Browser對應於檢視(View)部分,而會話外觀、邏輯Bean及值物件則對應於模型(Model)部分。其結構圖3所示:
2.1、資料層
(1)層定義
資料層對資料進行管理,並向業務邏輯層提供標準化的開放訪問介面。
資料層目前主要提供兩種形式的服務方式:資料庫方式和檔案方式。資料庫主要提供業務操作資料等具有明顯結構化特性的資料的儲存和訪問服務;檔案主要提供包括掃描文件影象、傳真、照片、計算機生成的報告、字處理文件、電子表格、簡報、語音和視訊片段等非結構化資料的儲存和訪問服務。
主要功能:資料建立、資料儲存、資料查詢、資料更新、資料刪除、資料安全、事務支援、資料備份/恢復。
(2)與其他層介面
1)資料庫方式的資料層面向業務邏輯層提供資料庫訪問服務介面,業務邏輯層通過JDBC協議訪問資料庫服務。
2)檔案方式的資料層面向業務邏輯層提供檔案級的訪問服務介面,業務邏輯層通過作業系統本身提供的檔案訪問API訪問檔案資料。
圖3 MyFramework框架結構圖 |
2.2 業務邏輯層
(1)層定義
業務邏輯層接受從表示層輸入的使用者請求,將其轉化為業務邏輯過程能夠理解的方式,根據特定的業務邏輯有序地向資料層傳送資料請求,並將資料層返回的資料解釋及組合成使用者所需資訊,返回給表示層,是整個應用軟體系統中業務邏輯的實現和處理核心。業務邏輯層執行在基於J2EE應用伺服器的EJB及WEB容器中。
(2)元件定義
業務邏輯層包含會話外觀(Session Fa?ade)、邏輯Bean(Logic Bean)和和資料存取Bean(Data Access Bean)等三個邏輯元件。
1)會話外觀
提供了面向表示層的統一的業務邏輯呼叫介面;是資料存取事務的邊界,所有資料存取事務都由會話外觀進行管理,即會話外觀負責資料存取事務的開始和關閉。
業務邏輯完成方式:通過呼叫邏輯Bean實現業務邏輯。
2)邏輯Bean
提供了業務邏輯具體實現;具有可複用性:可以直接被會話外觀呼叫,實現會話外觀所需的業務邏輯;可以被其他邏輯Bean呼叫,此時此邏輯Bean作為一個更復雜的業務邏輯的一個組成部分。
業務邏輯完成方式:可以通過呼叫其他的邏輯Bean實現相對複雜的業務邏輯;可以直接呼叫資料存取Bean完成相對簡單的業務邏輯。
3)資料存取Bean
提供了資料層的訪問介面;不負責管理事務,它只是被動的使用呼叫者傳入的事務環境;與資料庫表的對映方式,通常採取單個數據表對應單個數據存取Bean的對映方式,由單個數據存取Bean包含對應單個數據表的所有相關資料訪問操作。
4)值物件
包含業務邏輯實體的屬性,不包括業務邏輯實體的操作;是表示層和業務邏輯層資料交換的主體單元,和會話外觀一同組成了完整的業務邏輯實體,提供了業務邏輯層面向表示層的統一介面;與資料庫表的對映方式,通常採取單個數據表對應單個值物件的對映方式;可以與不同型別值物件以聚合方式組成新的值物件。
(3)與其他層介面
1)由會話外觀提供面向表示層的業務邏輯呼叫介面,表示層通過Java本地呼叫訪問業務邏輯層。
2)資料存取Bean通過JDBC訪問資料庫服務。
3)資料存取Bean通過作業系統提供的系統服務訪問檔案資料。
2.3 表示層
(1)層定義
表示層接受使用者提交的輸入請求,通過對業務邏輯層的訪問,獲得並向用戶輸出視覺化響應。
(2)元件定義
採用MVC設計模式,由Servlet提供頁面請求和請求響應的總體控制,JSP和瀏覽器提供請求結果響應的視覺化顯示。
1)Servlet
接收所有使用者由通過瀏覽器提交的業務請求,併合成相應的值物件,訪問業務邏輯層完成業務邏輯實體的業務處理;將業務邏輯實體的變化以值物件的方式通知並轉向相應的JSP。
2)JSP
根據Servlet告知的值物件,合成請求響應結果的最終輸出格式化文字(HTML);將合成格式化文字以網路協議的方式傳送給提交業務請求的使用者瀏覽器。
3)瀏覽器
提供使用者輸入業務請求資料的輸入介面,資料驗證通過後提交業務請求;接收業務請求響應的HTML文字,將業務請求響應結果以視覺化的訪問呈現給使用者。
4)WebService
是業務邏輯層對外部系統提供服務的邊界和介面,完成和外部系統的整合和互動。
(3)與其他層介面
1)Servlet通過Java本地呼叫訪問業務邏輯層。
2)瀏覽器通過HTTP/HTTPS協議向表示層提出業務請求並接收表示層的業務響應。
3、框架的配置檔案
(1)系統初始化配置檔案:web.xml
該檔案是Controller專屬的配置資訊檔案。控制器在第一次啟動時需要從這個檔案載入系統的配置資訊。檔案內容如下:
<servlet> <servlet-name>controlservlet</servlet-name> <servlet-class>mytools.control.web.ControlHan-dler</servlet-class> </servlet> <servlet-mapping> <servlet-name>controlservlet</servlet-name> <url-pattern>/controler</url-pattern> </servlet-mapping> |
(2)頁面導航配置檔案:web_config.xml
<?xml version="1.0" encoding="GB2312"?> <web-config> <forwards> <forward name="XX" path="filename.jsp"/> ………… </forwards> <action-mappings> <action name="XX" type="ActionClassName" method="methodName"/> ………… </action-mappings> </web-config> |
web_config.xml檔案是整個框架的重要部分,它控制了系統執行時的執行流程。該檔案包括兩種元素:<forwards>和<action-mappings>,其中<forwards>元素用來設定當前要轉向呼叫的JSP頁面,而<action-mappings>則設定了當前使用者提交的操作要呼叫哪一個Action 類,及當前類中的哪個方法。
總結
WebFramework框架已經在一個航運管理專案中經過測試和檢驗,實踐證明,此框架在中大型專案開發中,可以縮短開發週期,提高開發效率,系統執行穩定,易於維護。
有關應用開發框架的研究是一個不斷深入,逐步完善的過程,在對WebFramework不斷推廣試用的基礎上,還將進一步擴充套件其功能,使其應用領域更加廣泛。