時間:2023-05-30 09:46:48
開篇:寫作不僅是一種記錄,更是一種創(chuàng)造,它讓我們能夠捕捉那些稍縱即逝的靈感,將它們永久地定格在紙上。下面是小編精心整理的12篇mvc框架,希望這些內(nèi)容能成為您創(chuàng)作過程中的良師益友,陪伴您不斷探索和進步。
關(guān)鍵詞:Web前端;mvc;意義
前言:Web前端開發(fā)是Web技術(shù)發(fā)展中的一個重要組成部分,在傳統(tǒng)的前端開發(fā)中由于外界因素的影響導(dǎo)致其開發(fā)形式呈現(xiàn)出簡單化的特點,即以頁面為主體來展示界面中的信息。然而隨著科學技術(shù)的不斷進步,Web前端開發(fā)形式上變得更為復(fù)雜,但是其功能方面也逐漸實現(xiàn)了與用戶間的相互交流。以下就是對Web前端MVC框架意義的詳細闡述,望其能為現(xiàn)代背景下Web前端開發(fā)技術(shù)的可持續(xù)發(fā)展提供有利的文字參考。
一、傳統(tǒng)MVC模式基本概念分析
在傳統(tǒng)MVC模式中其應(yīng)用被劃分為模型層、視圖層、控制層三個層次,而經(jīng)過大量實踐調(diào)查表明,不同層次在系統(tǒng)實際運行中承擔著不同的職責。模型層在系統(tǒng)運行中的任務(wù)即為數(shù)據(jù)處理。且數(shù)據(jù)模型層也可通過數(shù)據(jù)訪問的方式來獲取自身所需信息,并優(yōu)化數(shù)據(jù)整合,將其應(yīng)用于業(yè)務(wù)包裝中,為用戶提供更為高質(zhì)的服務(wù)體系。視圖層在系統(tǒng)運行中的主要任務(wù)即為顯示數(shù)學模型中處理的信息等。但是,由于視圖層數(shù)據(jù)顯示存在著針對性特點,因而在利用其進行數(shù)據(jù)顯示時應(yīng)前面掌握其特性。另外,視圖層中功能的發(fā)揮需要基于數(shù)據(jù)模型來完成,因此在一定程度上限制了其應(yīng)用領(lǐng)域??刂茖釉谙到y(tǒng)中的主要職能即為對系統(tǒng)中應(yīng)用程序的合理控制,并在視圖數(shù)據(jù)顯示中出現(xiàn)問題時,對其問題的發(fā)生進行合理控制,且在事件控制后作出相應(yīng)響應(yīng)提醒相關(guān)技術(shù)人員。另外,在控制層事件處理中模型層也承擔著協(xié)助的作用,即在控制層作出相應(yīng)后,模型層要及時整合數(shù)據(jù)、信息,并合理更新視圖層中所顯示的數(shù)據(jù)[1]。
二、前端MVC框架
就目前的現(xiàn)狀來看,前端MVC應(yīng)用最為廣泛的即Backbone.js,Ember.js、Angular.js等幾種。這幾種前端框架都是基于MVC完成的,但是經(jīng)過大量的實驗表明,每種框架處理問題的方式都存在著一定差異。Backbone.js與其它框架相比其優(yōu)勢在于可更好的解決系統(tǒng)應(yīng)用中層次問題,進而為用戶提供更為可靠的操作平臺。其次,Backbone.js框架應(yīng)用層中的視圖層在模型數(shù)據(jù)修改后可及時對自身頁面顯示的數(shù)據(jù)進行修改,確保視圖層與數(shù)據(jù)模型層數(shù)據(jù)的一致性。此外,Backbone.js框架還支持定位功能,即對其的應(yīng)用可確保在系統(tǒng)實際運行中出現(xiàn)需處理的事件時,可及時通過定位的形式找到事件的源頭,并對其進行有效解決。Ember.js框架其廣泛應(yīng)用于桌面開發(fā)中,且由于其界面設(shè)計存在著標準化的優(yōu)勢,因而得到了更多用戶的親睞。另外,其可協(xié)助MVC系統(tǒng)的運行,幫助其處理應(yīng)用層中相應(yīng)事件問題。此外,Ember.js還為用戶提供了模板使用說明,促使其在對界面進行實際操作過程中可有效掌握魔板操作方法,避免不規(guī)范操作行為的發(fā)生。Angular.js源自于Google設(shè)計,其在一定程度上拓寬了應(yīng)用層中的詞匯使用范圍,同時也在系統(tǒng)界面中增添了部分動態(tài)內(nèi)容,便于用戶界面操作行為的展開。
三、Web前端MVC框架的意義分析
(一)jQuery等庫與前端MVC間的區(qū)別
jQuery等庫與前端MVC間的區(qū)別主要表現(xiàn)在以下幾個方面:第一,二者解決的問題存在著一定的差異,即jQuery主要應(yīng)用于對代碼、封裝等問題的解決。而其也為系統(tǒng)實際運行提供了多種封裝方法,由此穩(wěn)固了代碼結(jié)構(gòu)的合理性設(shè)置,而前端MVC框架與jQuery等庫在問題解決方面有所不同,其更加傾向于對程序組織方面問題的解決,進而推動系統(tǒng)中的程序運行逐漸趨于規(guī)范化。另外,前端框架為系統(tǒng)運行提供了一套規(guī)范化的問題解決方案,致使系統(tǒng)運行中出現(xiàn)相應(yīng)問題時可及時參照方案對問題展開及時、有效的解決,且最終提高系統(tǒng)運行的穩(wěn)定性;第二,jQuery的操作中心為DOM,而MVC框架的中心卻為模型。因而MVC與jQuery相比其流程的變更更為及時,且也為現(xiàn)代工程師的代碼編寫提供了有利條件。另外,MVC框架解決了傳統(tǒng)HTML源碼處理中的問題,促使相關(guān)工作人員在實際工作開展過程中即可通過參照前端MVC框架中的規(guī)范化流程打通后端處理,提高系統(tǒng)中的整體運行效率[2]。
(二)Web前端MVC框架適用范圍
近年來,Web前端MVC框架的開發(fā)意義逐漸引起了人們的關(guān)注,而從Web前端MVC框架的適用范圍研究中即可看出其在系統(tǒng)運行中占著至關(guān)重要的位置。對于此,可以從以下幾個方面入手分析:第一,從大量的實踐中可以看出,Web前端MVC框架不適用于頁面型產(chǎn)品中,造成此現(xiàn)象的原因主要歸咎于此類產(chǎn)品主要依附于服務(wù)器來運作自身系統(tǒng),因而在此背景下,jQuery等庫會更好的滿足其互動性需求,且最終導(dǎo)致Web前端MVC框架在頁面型產(chǎn)品中無法發(fā)揮其自身效用;第二,在軟件型產(chǎn)品,對于Web前端MVC框架的應(yīng)用是非常必要的。首先由于軟件型產(chǎn)品對數(shù)據(jù)操作能力的要求較大,因而若將Web前端MVC框架應(yīng)用于軟件型產(chǎn)品實際運行中,那么框架中的數(shù)據(jù)模型層會在一定程度上滿足其數(shù)據(jù)操作需求,且會在系統(tǒng)實際運行中出現(xiàn)問題時,對數(shù)據(jù)展開及時的更新處理。其次,軟件型產(chǎn)品中會涉及到大量的視圖操作,但是由于jQuery等庫無法完成高效率的操作行為,因而將Web前端MVC框架應(yīng)用于其中,會在一定程度上更好的滿足程序開發(fā)需求[3]。
結(jié)論:綜上可知,Web前端MVC框架在程序開發(fā)中的應(yīng)用有著一定的限制性特點,因而在Web前端MVC框架不斷創(chuàng)新的背景下,相關(guān)開發(fā)人員在實際工作開展過程中應(yīng)結(jié)合Web前端MVC框架的特性將其應(yīng)用于程序開發(fā)中,提高系統(tǒng)運行的整體運行效率,同時促使開發(fā)產(chǎn)品具備自身獨有特色。另外,為了確保Web前端MVC框架設(shè)計的可持續(xù)發(fā)展,要求相關(guān)技術(shù)人員應(yīng)致力于架構(gòu)與代碼的研究,為其開發(fā)提供便利。
參考文獻
關(guān)鍵詞:MVC設(shè)計模式;B/S架構(gòu);Struts 2.0; Xml文檔解析;J2EE
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2011)10-2308-02
Key Technology Research of Web Framework Based on MVC Pattern
LI Jun-jun, FU Hong, ZHANG Li, JIANG Zu-xin
(College of Information Science and Engineering, Henan University of Technology, Zhengzhou 450001, China)
Abstract: There is a growing emphasis on B / S network applications, MVC Pattern is widely used in Web application development. People design many Web Frameworks which are based on MVC Pattern in order to save software development time. By studying the achievement of MVC mechanism in Struts 2.0, summarizes a series of key technologies needed when design Web Framework based on MVC Pattern.
Key words: MVC design pattern; B/S architecture; Struts 2.0; Xml document parsing; J2EE
模型-視圖-控制器(MVC,Model-View-Controller)最早是smalltalk語言研究團提出的,應(yīng)用于用戶交互應(yīng)用程序中。隨著基于B/S架構(gòu)的網(wǎng)絡(luò)應(yīng)用的高速發(fā)展,MVC設(shè)計模式在Web開發(fā)中找到了用武之地,MVC開發(fā)模式可以實現(xiàn)分離數(shù)據(jù)和數(shù)據(jù)表現(xiàn),讓開發(fā)人員開發(fā)一個可伸縮性強,便于擴展的控制器,來維護整個流程。
面向?qū)ο蠹夹g(shù)的出現(xiàn)和應(yīng)用大大提高了軟件的重用性和軟件的質(zhì)量。Java語言作為一種面向?qū)ο笳Z言,為Web開發(fā)提供了強有力的支持,Sun公司提出的J2EE可簡化且規(guī)范應(yīng)用系統(tǒng)的開發(fā)與部署,進而提高可移植性、安全與再用價值。Struts 2.0框架就是基于J2EE和MVC設(shè)計模式開發(fā)的一個優(yōu)秀Web開發(fā)框架。
1 MVC模式的設(shè)計思想
MVC的設(shè)計思想就是:開發(fā)人員將一個系統(tǒng)的輸入,輸出,流程處理編程方式轉(zhuǎn)換為模型層,視圖層,控制層三層編程方式,從而使整個系統(tǒng)責任明確,接口清晰,加快設(shè)計開發(fā)過程。一般Web框架如圖1所示。
2 Web框架設(shè)計流程
Web框架設(shè)計流程圖如圖2所示。
本文采用目前廣為應(yīng)用的J2EE技術(shù)作為開發(fā)框架的主要技術(shù)。開發(fā)的基本思路是:
View采用Jsp和JavaScript技術(shù),Controller層采用Servlet和Xml技術(shù),Model層采用Java和JavaBean技術(shù)。
3 WEB各層設(shè)計關(guān)鍵點
每一個框架都是考慮了最通用的情況,并不一定適用于所有的項目。這要求開發(fā)人員對框架有深刻的理解,優(yōu)秀的開發(fā)人員需要跳出具體的框架,站在更高的層次上把握框架,從設(shè)計理念出發(fā)去具體對待框架,在當前框架不能滿足項目需求的時候,能夠修改框架以便適合自己的項目需求。本文通過一個Web框架的設(shè)計來具體分析相關(guān)技術(shù)。其結(jié)構(gòu)如圖3所示。
3.1視圖層設(shè)計
在視圖層采用JSP技術(shù),因為JSP可以使用JavaScript,JavaBean和自定義標簽等,這些技術(shù)組合在一起,可以獲得靈活的數(shù)據(jù)組合方式。
1) 為了方便管理,可以在所有的JSP頁面的頂部添加一個頁面名稱。
2) 為防止代碼混亂,可以在框架所有的JSP頁面中統(tǒng)一設(shè)置一種編碼方式,即可以在JSP頁面的頂部添加如下代碼:
3) 通過在 Web.xml中定義Servlet的請求方式,可以將所有JSP頁面的請求都轉(zhuǎn)入Servlet進行處理,這樣很容易通過request,response實現(xiàn)JSP和Servlet之間的數(shù)據(jù)轉(zhuǎn)化。為防止要獲取的數(shù)據(jù)量比較大帶來的負面影響,可以在Servlet中將所有傳遞到JSP頁面中的數(shù)據(jù)存儲在一個Map中,這樣頁面只需從request中取出Map,剩下的數(shù)據(jù)就可以從Map中獲取,加快頁面的處理速度。
4) 為了統(tǒng)一整個應(yīng)用的風格,對于窗口的打開方法,可以在系統(tǒng)中將其抽取出來,定義一個公用方法。一般而言,會對要打開的URL,窗口名稱,窗口寬度和高度進行設(shè)定,而其他屬性保持不變。如下面方法定義:
functionopenWindow(name, url, width, height){
var screenWidth = screen.width;
var screenHeight = screen.height;
var w;
w = window.open(url, name , "width="+width+",height="+height+",
menubar= no,resizable=yes,toobar=no,directories=no, location=no,
scrollbars=yes,status=yes,copyhistory=0");
w.moveTo((screenWidth-width)/2,( screenHeight-height)/2);
w.focus();
}
代碼說明:
傳入的參數(shù)分別表示:窗口名稱,要打開的URL,窗口寬度和高度。
w.moveTo()的意思是:打開的窗口顯示在屏幕中心。
w.focus()函數(shù)的意思是:使焦點在打開的窗口上。
3.2 控制層設(shè)計
控制層主要用來轉(zhuǎn)發(fā)從視圖層傳來的數(shù)據(jù)和請求到相應(yīng)的模型層,因此實現(xiàn)它的最好方法是使用Servlet。
一般在Servlet的低版本中,在Servlet中要同時實現(xiàn)解析配置文件,對頁面?zhèn)鱽淼闹颠M行轉(zhuǎn)化,調(diào)用相應(yīng)的函數(shù),以及返回結(jié)果處理后的頁面等。這樣使得控制器設(shè)計顯得很臃腫,也不利于代碼的維護。隨著java版本的不斷提高,在Servlet 2.3規(guī)范中引入了Servlet過濾器,這種機制提供了在轉(zhuǎn)入Servlet之前進行預(yù)處理的功能。
Servlet過濾器其實是面向方面編程思想的一種實現(xiàn)方式。在實際應(yīng)用中也可以利用Java提供的動態(tài)技術(shù)來實現(xiàn)簡單的AOP,并利用配置文件實現(xiàn)動態(tài)“插拔”。
在控制器的設(shè)計中,返回頁面的映射方式,表單提交方式和多動作處理方式十分重要,這三方面良好的設(shè)計可以很好改善框架的功能。
返回頁面的映射設(shè)計可以采用Xml技術(shù)方便的進行映射配置,只需在配置文件中指定一個forward元素,而且在映射關(guān)系改變的時候,只需修改配置文件就可以了。頁面之間元素的傳遞也很重要,一般可以使用HashMap來實現(xiàn),但是我們要把頁面表單直接放入HashMap中會降低頁面值獲取與控制器之間的耦合性??梢酝ㄟ^將表單元素值封裝成一個VO(值對象),將VO放入HashMap中,使用時從HashMap中取出,而VO與Action關(guān)系可以通過Xml文件驚醒配置。而多動作的處理方式也通過Xml文件來實現(xiàn).
3.3 模型層設(shè)計
模型對象對應(yīng)了商業(yè)規(guī)則和商業(yè)數(shù)據(jù),即分為業(yè)務(wù)處理對象和業(yè)務(wù)實體對象。業(yè)務(wù)處理對象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模型,并且把響應(yīng)提交到合適的視圖組件以產(chǎn)生響應(yīng)。業(yè)務(wù)實體對象可以通過定義屬性描述客戶端表單數(shù)據(jù)。所有業(yè)務(wù)實體對象都EntityBase派生子類對象,業(yè)務(wù)處理對象可以直接對它進行讀寫,而不再需要和request、response對象進行數(shù)據(jù)交互。通過業(yè)務(wù)實體對象實現(xiàn)了對視圖和模型之間交互的支持。實現(xiàn)把"做什么"(業(yè)務(wù)處理)和"如何做"(業(yè)務(wù)實體)分離。這樣可以實現(xiàn)業(yè)務(wù)邏輯的重用。MVC沒有現(xiàn)成的設(shè)計方法來指導(dǎo)Model的設(shè)計。但是良好的Model層設(shè)計可以提高整個框架的可擴展性,也有利于模型的重構(gòu)和可重用性。
我們可以設(shè)計一個接口,讓所有的模型層對象都實現(xiàn)這個接口,以統(tǒng)一的方式進入模型層的處理,實現(xiàn)業(yè)務(wù)規(guī)則的調(diào)用,完成用戶的請求。對于視圖層傳入的數(shù)據(jù),可使用在控制層中轉(zhuǎn)化的得到的VO;對于業(yè)務(wù)邏輯可以放在DAO中處理。
4 結(jié)束語
基于MVC模型的Web框架,只要合理設(shè)計三層之間的關(guān)系,可以有效提高系統(tǒng)的可重用性,可以有效提高系統(tǒng)設(shè)計效率,縮短開發(fā)周期。
隨著新技術(shù)的不斷發(fā)展,為基于MVC模式的Web框架設(shè)計提供了更強的技術(shù)支持,其功能將日益完善。
參考文獻:
[1] Camma E.Design Patterns:Elements of Reusable Object-Oriented Software[M].Addison Wesley,1994:5-20.
[2] Husted T.Struts In Action[M].Manning Publication Co.,2003.
關(guān)鍵詞 PHP框架 輕量級 模塊化 插件化
1 MVC設(shè)計模式
MVC是一種軟件設(shè)計模式,它強制性使應(yīng)用程序的輸入、處理和輸出分開,分解成模型、視圖、控制器3種部件,它們各自處理自己的任務(wù),如圖1所示。
視圖(View)是用戶看到并與之交互的界面。模型(Model)用來表示數(shù)據(jù)和業(yè)務(wù)規(guī)則,數(shù)據(jù)的處理、邏輯和功能的計算??刂破鳎–ontroller)用來接受用戶的操作并調(diào)用模型和視圖完成用戶的需求。
圖1:MVC工作流程圖
使用MVC模式開發(fā)的優(yōu)點主要有加快項目的開發(fā)效率、增強項目的可維護性、有利于軟件工程化管理。
2PHP開發(fā)框架現(xiàn)狀
所謂框架就是通過提供一個開發(fā)程序的基本架構(gòu),把程序開發(fā)擺到了流水線上。使用框架的優(yōu)勢在于能極大地促進快速軟件開發(fā),節(jié)約系統(tǒng)開發(fā)的時間,創(chuàng)建更為穩(wěn)定的程序,并能減少開發(fā)者的重復(fù)編寫代碼的勞動。
目前流行的PHP開發(fā)框架有:Zend Framework、CakePHP、symfony、E框架、Codelgniter、ThinkPHP等。但使用框架也有一些不足,主要有:①增加系統(tǒng)的復(fù)雜性。②在提高大型項目開發(fā)效率的同時,降低了小型項目的開發(fā)效率,③數(shù)據(jù)處理流程復(fù)雜化,從而在一定程序上影響系統(tǒng)的性能。④為了使框架具有良好的兼容性的,提供大量的功能組件和特性,普遍為重量型框架體系。
框架的重量型與輕量型是相對的,兩者解決問題的側(cè)重點是不同的。輕量級框架側(cè)重于減小開發(fā)的復(fù)雜度,相應(yīng)的它的處理能力便有所減弱(如事務(wù)功能弱、不具備分布式處理能力),比較適用于開發(fā)中小型系統(tǒng)應(yīng)用。重量級框架則強調(diào)高可伸縮性,適合與開發(fā)大型企業(yè)應(yīng)用。
輕量級框架和重量級框架的區(qū)別是以啟動程序需要的資源來決定。比如,EJB啟動的時候,需要消耗大量的資源如內(nèi)存,CPU等,所以是重量級。
鑒于此,本文提出一種基于MVC的輕量級PHP開發(fā)框架,同時強調(diào)模塊化、插件化按需加載服務(wù)的框架體系,具備在降低開發(fā)復(fù)雜度的同時,增加系統(tǒng)的可伸縮性。
3輕量級WEB開發(fā)框架設(shè)計與實現(xiàn)
3.1框架底層結(jié)構(gòu)
通過對Web常規(guī)應(yīng)用的抽象,整個框架可由系統(tǒng)初始化基本函數(shù)庫、系統(tǒng)核心類庫,模型類庫等公共基礎(chǔ)類組成。核心主要負責底層的操作,由核心加載系統(tǒng),加載模塊。在這里所謂系統(tǒng)是指多個模塊的集合體,系統(tǒng)內(nèi)各模塊由完成系統(tǒng)加載。各個系統(tǒng)的實現(xiàn)均以繼承系統(tǒng)父類的方法來進行擴展,系統(tǒng)父類中已經(jīng)實現(xiàn)了系統(tǒng)的功能,其余個性化的功能按系統(tǒng)的需求進行擴展實現(xiàn)。各個小功能模塊的實現(xiàn)也均以繼承模塊父類的方法來擴展,功能也是要按模塊需求擴展。最終形成核心+系統(tǒng)+模塊+插件的體系架構(gòu)。
圖2:框架架構(gòu)圖
3.2框架的運行過程
用戶請求URL時系統(tǒng)會根據(jù)URL路由進行路徑的判定,如果適用于靜態(tài)化規(guī)則的,則直接返回指定的靜態(tài)化頁面;如果不是靜態(tài)URL的(偽靜態(tài)或動態(tài)),則將請求轉(zhuǎn)發(fā)給相應(yīng)的控制器進行解析,解析處理后再由相應(yīng)的控制器進行響應(yīng),處理器通過與模型、視圖、緩存等進行交互后最終形成完整的數(shù)據(jù)輸出給請求的用戶。
3.3開發(fā)統(tǒng)一規(guī)范性要求
系統(tǒng)的二次開發(fā),需要開發(fā)者遵照框架設(shè)定的規(guī)范進行,形成統(tǒng)一的標準,以方便后續(xù)代碼的管理和維護。其中緩存文件根據(jù)不同的類型分別存在在不同的子目錄和文件,主要的目錄和文件如表1所示。
3.4加載器
加載器是一個自動包含所需的組件并將其進行初始化的一類函數(shù),它們根據(jù)用戶請求的URL判斷需要加載的模塊或插件,按需加載模塊或插件所特有的功能組件,可加載類、模型、配置、語言包等。
3.5錯誤處理
框架定義了Debug調(diào)試模式和常規(guī)模式兩種運行機制。Debug調(diào)試模式主要用于系統(tǒng)開發(fā)人員對系統(tǒng)進行調(diào)試開發(fā),輸出系統(tǒng)規(guī)定的報錯信息,方便系統(tǒng)開發(fā)人員調(diào)試系統(tǒng)。常規(guī)模式則屏蔽系統(tǒng)錯誤,在用戶請求出錯或系統(tǒng)出錯時,返回指定的頁面并記錄出錯信息。系統(tǒng)開發(fā)完成后,系統(tǒng)關(guān)閉Debug高度模式進入常規(guī)運行模式。
3.6模型、模塊
模型是對統(tǒng)核心代碼的應(yīng)用實例,通過對底層核心類的繼承來擴展功能,形成模型(在這里也稱為模塊)特有的功能。支持常規(guī)的文章資訊、圖片、下載、視頻等模型應(yīng)用,支持對模塊進行復(fù)制、安裝、暫停、刪除,真正實現(xiàn)按需加載,示例如圖3所示。
圖3:系統(tǒng)中模型的管理
3.7控制器
控制器是所有邏輯的中心,負責將用戶的URL以合理的方式響應(yīng)。系統(tǒng)采用多文件入口機制,用戶請求URL直接向具體的文件請求,提高了系統(tǒng)的運行效率和具備良好的SEO支持。典型的URL請求如:http://localhost/admin.php?moduleid=7&file=course??刂破骺梢韵蝾悗?、模型、緩存等眾多對象發(fā)送請求,并通過數(shù)據(jù)層和視圖層訪問,以實現(xiàn)清晰的分層分工機制。
3.8視圖/模板
視圖是使用控制器處理后的數(shù)據(jù)來渲染用戶指定的模板,以最終展現(xiàn)給用戶的界面。同一個視圖可以被不同的模型調(diào)用。視圖收到渲染請求后,為了提高渲染的效率,會優(yōu)先查找要渲染對象的緩存文件,如果緩存文件中存在,則將其加載到內(nèi)存,然后輸出數(shù)據(jù);如果緩存中不存在,同加載模板編譯器對模板進行編譯,并存放在指定的位置,最后再加載并輸出數(shù)據(jù)。
3.9緩存機制
框架當中大量使用緩存機制,系統(tǒng)運行時,直接讀取緩存文件,這極大地提高系統(tǒng)的執(zhí)行效率??晒┚彺娴男畔ㄏ到y(tǒng)配置信息、模塊配置信息、插件配置信息、視圖模板以及需要頻繁從數(shù)據(jù)庫讀取信息的數(shù)據(jù),時時系統(tǒng)也支持memcached緩存機制。當系統(tǒng)要讀取的緩存文件不存在時,將加載文件緩存生成器,生成相應(yīng)的緩存文件,并存放在指定的位置,如圖4所示。
圖4:部分重要的緩存目錄和文件
4總結(jié)
每個PHP框架都有自己的特色,如CodeIgniter是一個為建立PHP網(wǎng)站的人們所設(shè)計的工具包。其目標在于快速的開發(fā)項目,提供了豐富的庫組以完成常見的任務(wù)。本文提出的框架有利于團隊合作開發(fā),提供便利的模板機制,高效的緩存文件和多樣的URL規(guī)則,統(tǒng)一規(guī)范的文件目錄結(jié)構(gòu),以模塊化、插件化使系統(tǒng)功能和規(guī)模具備極高可伸縮性。
參考文獻:
[1]郭欣.構(gòu)建高性能Web站點[M].北京:電子工業(yè)出版社,2009.
[2]劉立芳.基于MVC模式與插件式設(shè)計的開發(fā)架構(gòu)的探討與實踐[J].電腦編程技巧與維護.2011(14).
[3]劉宇祥 PHP流行框架的研究[J] 青春歲月.2012(8).
[4]趙增敏.PHP動態(tài)網(wǎng)頁開發(fā)[M].北京:電子工業(yè)出版社,2009.
作者簡介:
關(guān)鍵詞: 計算機軟件; MVC構(gòu)架; Jakarta Struts框架; 軟件測試
中圖分類號: TN911?34; TP311.5 文獻標識碼: A 文章編號: 1004?373X(2017)06?0071?04
Abstract: Although the separation design thought of MVC model has improved the overall quality of the software, but because the model only defines the configuration of static architectural components, MVC model con not clearly provide the behavioral expression of Web application program development process, which leads to the obvious differences between the description of Web application program and its behavioral characteristics. To fill this difference, a behavior model is proposed in this paper, in which the automatical receiving mechanism of the URL request sequence of the program is modeled, and a testing framework based on behavior pattern is proposed for Web application program. The research result shows that, when it is focused on the cyclic behavior of an automatic mechanism, this framework can provide a better test standard for Web application program. The result that the framework is applied to the configuration scheme of Jakarta Struts framework shows that the behavior model has achieved a very good effect in the classification of the testing paths of the Web application.
Keywords: computer software; MVC architecture; Jakarta Struts framework; software testing
0 引 言
Web應(yīng)用是計算機響應(yīng)系統(tǒng)外的網(wǎng)絡(luò)請求所需的一種軟件技術(shù),其基本特征是根據(jù)不同交互系統(tǒng)和環(huán)境所表現(xiàn)出的特殊行為機制。在傳統(tǒng)基于功能模塊的軟件中,輸入輸出關(guān)系極為重要,這種特征影響著軟件架構(gòu)的各個方面[1?3]。網(wǎng)頁應(yīng)用普遍建立在基于MVC架構(gòu)上的J2EE平臺上,其為Sun 微系統(tǒng)公司制定的一系列建網(wǎng)頁應(yīng)用的基礎(chǔ)API接口集合。MVC模型給出了在API之上來結(jié)合組件以開發(fā)網(wǎng)頁應(yīng)用的架構(gòu)模型,其旨在采用合適的方式對組件進行分離式設(shè)計,增加Web應(yīng)用的可維護性和可重用性。然而,由于MVC模型僅提供抽象的形式,導(dǎo)致了行為描述在描述組件靜態(tài)架構(gòu)關(guān)系時被分離,在實際開發(fā)調(diào)試及測試的過程中兩者差異較大[4?6]。因此,本文給出一種簡單的行為模型,并定義一種直接行為描述方式。本文的基本想法是將Web應(yīng)用程序的行為類比為一個自動機,其狀態(tài)為JSP,且狀態(tài)轉(zhuǎn)換被URL請求所調(diào)用。假設(shè)應(yīng)用程序有一個進入頁面,如歡迎頁面,同時有一些最終頁面,如感謝頁或錯誤頁。在網(wǎng)頁應(yīng)用中,返回到之前訪問過的頁面常會要求相似的轉(zhuǎn)換。因此,本文考慮將重訪頁面作為改進測試?;谶@種思想,本文給出一種網(wǎng)頁程序的測試標準,并通過一個簡單的圖書管理系統(tǒng)來論證該方法的有效性。
1 網(wǎng)頁應(yīng)用的MVC模型
MVC模型由三種組件構(gòu)成:模塊、視圖和控制器。其中,模塊組件代表數(shù)據(jù)域,視圖組件處理客戶端的輸出,控制器組件定義對數(shù)據(jù)的操作。MVC模型通常在J2EE平臺上使用JSP/Servlet技術(shù)[7],其模型基本結(jié)構(gòu)如圖1所示。首先瀏覽器遞交一個需求給控制器,控制器根據(jù)需求處理模塊組件中的數(shù)據(jù),并將處理后的數(shù)據(jù)更新至后臺數(shù)據(jù)庫,然后控制器將會調(diào)用一個JSP對請求做出響應(yīng)。
文中MVC模型使用JSP/Servlet技術(shù),其中模塊組件采用JavaBean來實現(xiàn),視圖組件采用Java Server 頁面,控制器組件則采用ActionServlet實現(xiàn)。J2EE根據(jù)指定組件之間連接的配置信息來組裝組件。
Struts是由Jakarta項目開發(fā)的一個開源網(wǎng)頁應(yīng)用框架,Struts采用遵從如上所述的MVC模型的JSP/Servlet技術(shù),其具體類結(jié)構(gòu)如圖2所示?;贛VC模型的行為在其中的實現(xiàn)如下:ActionServlet是一個總的工廠類,負責處理外部請求及分配適當?shù)腁ctionServlet。開發(fā)人員通過定義操作類的子類來實現(xiàn)具體的控制行為。操作類是通過ActionServlet類激發(fā)的抽象。一個Servlet操作指的是一種活動形式目標以及做一些處理操作,其結(jié)果被包括到操作轉(zhuǎn)發(fā)目標中以返回給Servlet操作[8?9]。Servlet操作將會根據(jù)描述ActionForward到JSP的映射關(guān)系A(chǔ)ctionMapping來調(diào)用一個JSP。最后,所調(diào)用的JSP作為響應(yīng)呈現(xiàn)。與此同時,JSP可能會根據(jù)其動態(tài)內(nèi)容做出一些相應(yīng)處理。
2 行為模型
基于MVC模型的Web應(yīng)用程序的原始外部行為是成對的請求序列和JSP,本文將網(wǎng)頁應(yīng)用的行為模式化為一種自動機。鑒于Struts框架,文中用有限狀態(tài)來完成自動機模式化,其中的狀態(tài)是一系列出現(xiàn)在配置中的JSP[10?11]。自動機的字母表來自ActionServlet的請求和響應(yīng),這些請求和響應(yīng)在其中被描述為配置文件。本文假設(shè)有一個最初的JSP作為預(yù)期行為的切入點,同時假設(shè)最終的JSP作為網(wǎng)頁應(yīng)用事務(wù)和會話的預(yù)期終結(jié)點。
定義1 給定一個在Struts中描述的網(wǎng)頁應(yīng)用A,一個有限自動機WebA=(View,Act,AM,iv,F(xiàn)V),調(diào)用Web自動機定義如下:View是在A中的JSP文件;Act是A的一系列請求及Servlet響應(yīng)對集合;[AM?View×Act×View]是A的操作映射;[iv∈View]是A中的初始JSP頁面;[FV?View]是A中的最終JSP頁面集合。存在[a∈Act],本文定義rq/re,其中rq是一個對ActionServlet的請求標簽,re是對ActionServlet的響應(yīng)標簽,當ActionServlet被激活時,re被忽略。Action映射指被激活的指向指定的ActionServlet的指令集合,而JSP則根據(jù)ActionServlet被調(diào)用。
本文的建模目的旨在測試網(wǎng)頁應(yīng)用,即使在最終的JSP中,仍需存在一些鏈接以開始其另一個請求;但對于測試應(yīng)用的動態(tài)行為,這些鏈接并不重要,因通常這些鏈接并不包含應(yīng)用的邏輯組件,這些請求均惟一地被應(yīng)用映射到含有適當前綴的URL上。為了簡單起見,本文忽視這些參數(shù)。
圖3所示為一個行為模型的示例――簡單的圖書館管理系統(tǒng),其負責管理圖書數(shù)據(jù)庫。該圖書館管理系統(tǒng)由三個功能組成,其一是檢索系統(tǒng)中已注冊的書籍,該功能由JSP,QueryAct構(gòu)成搜索,由JSP構(gòu)成列表,并使用未認證的JSP呈現(xiàn)細節(jié)。另外兩個功能是注冊新書以及修改注冊記錄,這兩個功能由JSP執(zhí)行修改,由ModifyAct及RegistAct執(zhí)行注冊,由JSP顯示成功和失敗的結(jié)果,通過CertifyAct進行認證以及通過JSP來進行登錄實現(xiàn)。
圖3中Weblib的行為模型組成如下:
View = {search, list, detail, login, modify, regist, failure, success}
Act= {QueryAct/list,QueryAct/detail, CertifyAct/mod, CertifyAct/reg, CertifyAct/NG, ModifyAct/success, Modify/failure, RegistAct/success, RegistAct/failure, link search, link detail}
iv = search
FV = {list, detail, failure, success}
AM = {(search, QueryAct/list, list), (search,QueryAct/detail, detail), (search, CertifyAct/NG, login), (search, CertifyAct/mod, modify), (search, CertifyAct/reg, regist), (login, CertifyAct/NG, login), (login, CertifyAct/mod, modify), (login,CertifyAct/reg,regist), (detail, CertifyAct/mod, modify),(detail,CertifyAct/reg,regist), (detail, CertifyAct/NG, login), (modify, ModifyAct/success, success),(modify, ModifyAct/failure, failure), (list, link detail, detail), (regist, RegistAct/success, success), (list, link search, search),(regist, RegistAct/failure, failure), (detail, link search, search),(success, link search, search), (failure, link search, search)}
3 測試框架
給定一個網(wǎng)頁應(yīng)用A,WebA將遵從操作映射模擬全部的行為特性。每個字均會被WebA介紹以模仿預(yù)期A的事務(wù)或會話。語言同樣也被WebA接收,即L(WebA)。因此,檢測L(WebA)中的所有字是一種對A有效的測試方式。然而,因L(WebA)是一個常規(guī)集合,通常其是無窮的,從測試的角度來看,本文主要關(guān)注網(wǎng)頁應(yīng)用的特性,WebA中的循環(huán)是一個返回之前訪問過的頁面的序列,這些重復(fù)訪問的頁面通常會導(dǎo)致應(yīng)用中的邏輯組件進行相似的應(yīng)用。據(jù)此,在L(WebA)中最令人感興趣的測試是其中最多一次循環(huán)的字,為了包含所有轉(zhuǎn)換,必須將單循環(huán)考慮在內(nèi)。通過增加JSP的訪問,可以測試Web應(yīng)用程序更多的屬性。本文將這種思想形式化以形成一種測試標準。
Weblib有兩種循環(huán):由首尾頁間鏈接觸發(fā)的以及由更新認證鏈接觸發(fā)的。前一種循環(huán)是相似事務(wù)的重復(fù),后一種循環(huán)是用戶得到認證前的空循環(huán)。給定一個網(wǎng)頁自動機WebA=(View,Act,AM,iv,F(xiàn)V),一個執(zhí)行操作是一個由iv引發(fā)的View和Act的交變序列:[v0a1v1…alvl]。其中,[v0=iv,vl∈FV],且對于所有的i,[vi,ai+1,vi+1∈AM]。令Exec(WebA)為所有WebA的執(zhí)行操作計劃,occ(vi,e)為執(zhí)行操作e中出現(xiàn)vi的次數(shù)。文中記錄除去所有來自e的View活動序列L(e)和出現(xiàn)在e中的View集V(e)
定義2 擁有n度的A測試標準[TnA]定義如下:
[TnA={L(e)e∈Exec(WebA),?v∈V(e):occ(v,e)≤n+1}]
顯然,[T0A],[T1A],[T2A],…是遞增數(shù)列且[n=0∞TnA=][L(WebA)]。
在很多時候,[T0A]給出了一組大量的測試序列,圖4顯示了網(wǎng)頁應(yīng)用的測試框架。
在這一框架中,通過一個網(wǎng)頁應(yīng)用配置構(gòu)造了網(wǎng)頁自動機,然后提取了執(zhí)行操作。接著根據(jù)測試標準進行了測試,從[Tn]開始直到得到滿足條件的結(jié)果。測試標準的最大維度取決于測試中的網(wǎng)頁應(yīng)用,若任何循環(huán)均無副作用,則[T0]就足夠了。
將測試標準應(yīng)用在Weblib中。如前所述,特征值為L(Weblib)的正則表達式Replib如下:
[Replib=(Path1+Path2)(link_search(Path1+Path2))]
其中,
[path1defCertifyAct/NG?(CertifyAct/mod(ModifyAct/success+ModifyAct/failure)+CertifyAct/reg(RegistAct/success+RegistAct/failure))Path2def(QueryAct/list(e+link_detail)+QueryAct/detail)(e+Path1)]
此處描述測試標準為[T0]和[T1]時的測試序列,使用[ReplibTi]來表示語言限制為[Ti],如下:
[ReplibT0=Path01+(QueryAct/list(e+link_detail)) (e+Path01)]
其中,
[Path01def(e+CertifyAct/NG)×(CertifyAct/mod(ModifyAct/success+ModifyAct/failure)+CertifyAct/reg(RegistAct/sucess+RegistAct/failure)+QueryAct/detail))]
注意到CertifyAct的ActionServlet被重新激活多次,但由于其不是JSP,所以不會對測試標準造成影響。
4 Struts的應(yīng)用
將Struts的配置方案擴展以直接描述行為。主要增加了JSP和動作映射的結(jié)合信息。通過這種擴展,可以在Struts中描述一個網(wǎng)頁應(yīng)用的網(wǎng)頁自動機。本文為視圖組件創(chuàng)建了一個配置文件(wsm?config.xml),該擴展描述了JSP間的轉(zhuǎn)換關(guān)系。如圖5所示。
圖5顯示了圖書館管理系統(tǒng)中的struts?config.xml 和wsm?config.xml,網(wǎng)頁自動機Weblib由以下部分組成:iv指定為初始狀態(tài)元素的路徑屬性,F(xiàn)V則代表了終止狀態(tài)元素的路徑屬性。視圖和部分AM指定為視圖映射元素,每個擁有路徑屬性的視圖元素指定一個視圖和由該視圖鏈接的可能狀態(tài)轉(zhuǎn)換。動作鏈接元素定義了一個由其路徑屬性所請求的Servlet調(diào)用的狀態(tài)轉(zhuǎn)換。AM的其余部分由struts?config.xml中的一個動作映射元素所指定。根據(jù)每個和活動鏈接中路徑元素所匹配的動作元素,這些元素表明哪一種Servlet活動應(yīng)被激活以及哪些JSP應(yīng)被活動Servlet執(zhí)行的結(jié)果所調(diào)用。因此,AM是被視圖元素中的活動鏈接元素及映射活動元素所指定的。
5 結(jié) 論
本文提出了一種基于MVC模型的網(wǎng)頁應(yīng)用測試框架,首先定義了一種網(wǎng)頁應(yīng)用的行為模型,并在J2EE平臺上采用JSP/Servlet技術(shù)實現(xiàn)的MVC結(jié)構(gòu)展示了一種面向Jakarta Struts框架的應(yīng)用。該模型直觀地呈現(xiàn)了網(wǎng)頁應(yīng)用全面的行為,且在這種行為模型下進行了測試。本文的重點在于網(wǎng)頁應(yīng)用的特性,即通過重訪某些頁面經(jīng)常導(dǎo)致相似的頁面轉(zhuǎn)換,為此提出了基于重訪問相同頁數(shù)量的測試標準,相比較其他測試其更為精確。盡管測試標準基于測試中的網(wǎng)頁應(yīng)用的特性,在眾多情況下預(yù)期最簡單的測試標準可涵蓋哪些僅重復(fù)訪問一次的測試序列。
參考文獻
[1] 林艷琴.Web功能測試自動化的研究與應(yīng)用[D].成都:電子科技大學,2010.
[2] 侯婷.基于Web功能測試自動化研究與應(yīng)用[D].青島:山東科技大學,2014.
[3] 鄧璐娟,范乃梅,孫義坤,等.基于Web應(yīng)用的性能測試模型研究[J].計算機工程與應(yīng)用,2013,49(1):75?77.
[4] 王新.基于MVC模式的通用Web軟件系統(tǒng)開發(fā)框架設(shè)計與實現(xiàn)[D].成都:電子科技大學,2007.
[5] 郝紅巖.基于MVC模式的Web框架的應(yīng)用研究[D].武漢:武漢理工大學,2013.
[6] 王俊芳,李隱峰,王池.基于MVC模式的ThinkPHP框架研究[J].電子科技,2014,27(4):151?153.
[7] ATKINS D L, BALL Thomas, BRUNS Glenn, et al. Mawl: a domain?specific language for form?based services [J]. IEEE transactions on software engineering, 1999, 25(3): 334?346.
[8] 歐陽宏基,葛萌.基于Struts2與Hibernate框架的Java Web應(yīng)用研究[J].自動化技術(shù)與應(yīng)用,2016,35(2):48?52.
[9] MORALES?CHAPARRO R, LINAJE M, PRECIADO J C, et al. MVC web design patterns and rich internet applications [J]. Proceedings of the jornadas de ingenier?a del software y bases de datos, 2007, 32(5): 98?104.
【關(guān)鍵詞】 MVC 學生信息 管理系統(tǒng)
近年來,如何有效地管理學生信息,成為了各個學校面臨的一個難題。學生的信息是多種多樣的,其包含的數(shù)據(jù)量大,涉及的人員和部門廣,并且需要隨時更新。與此同時,學校在對學生信息的管理上也比較分散,不僅存在管理凌亂的現(xiàn)象,而且存在重復(fù)管理的問題,對學生信息的管理不能做到統(tǒng)一、規(guī)范和高效。
基于以上情況,本文提出了基于平臺和MVC的架構(gòu),采用 MVC技術(shù)進行學生信息管理系統(tǒng)的設(shè)計與實現(xiàn),希望能夠?qū)W生信息進行有效的管理,使得學生信息的管理更加快速、準確、方便。
1 MVC 框架
MVC是由微軟官方提供的基于MVC架構(gòu)模式的開發(fā)框架,是一個易于開發(fā)、易于測試、易于維護的框架,也是現(xiàn)今流行的一種MVC開發(fā)技術(shù)。在 MVC框架中,通過模型、視圖和控制器的功能分離,充分地實現(xiàn)用戶輸入、業(yè)務(wù)制定和界面顯示的獨立。
從用戶在瀏覽器中輸入請求信息,到在頁面獲得處理結(jié)果,大致需要經(jīng)過5個步驟。
(1)用戶在瀏覽器中發(fā)出信息請求,向控制器發(fā)送相關(guān)的操作命令。
(2)控制器接收到請求命令之后,向模型請求獲得有關(guān)的數(shù)據(jù)信息。
(3)模型根據(jù)請求將對應(yīng)的數(shù)據(jù)信息返回給控制器。
(4)控制器將相關(guān)的數(shù)據(jù)信息發(fā)送到相應(yīng)的視圖。
(5)相應(yīng)的視圖將獲得的數(shù)據(jù)信息返回到瀏覽器,顯示給用戶。
在 MVC的具體開發(fā)過程中,主要的工作是對控制器進行程序編寫。因為控制器既要處理用戶請求,又要實現(xiàn)與模型進行數(shù)據(jù)通信,以及向視圖發(fā)送數(shù)據(jù)信息,控制器在模型、視圖、控制器三者中處于一個中樞的位置。
3 學生信息管理系統(tǒng)的設(shè)計
建立學生信息管理系統(tǒng),實現(xiàn)數(shù)據(jù)處理的統(tǒng)一、規(guī)范和高效,通過對學生信息管理系統(tǒng)的需求分析,希望能夠探索出信息處理的最佳途徑。
3.1 需求分析
學生信息管理系統(tǒng)主要是圍繞與學生有關(guān)的數(shù)據(jù)信息進行處理的,應(yīng)當具有登錄管理、課程管理、學籍管理、成績管理、德育管理等功能模塊。
(1)登錄管理模塊:系統(tǒng)管理員設(shè)定每個用戶的登錄用戶名和初始密碼,并對用戶名和密碼具有修改和刪除的權(quán)限;同時,系統(tǒng)用戶登錄系統(tǒng)之后也能夠?qū)ψ约旱牡卿浶畔⑦M行修改。
(2)課程管理模塊:課程信息是屬于穩(wěn)定性比較強的一類信息,而且課程的開設(shè)與取消在學校的權(quán)力范圍之內(nèi),系統(tǒng)管理員在系統(tǒng)中扮演學校的角色設(shè)置課程的基本信息,并對課程的相關(guān)數(shù)據(jù)進行處理。教師只能查看課程的基本信息。
(3)學籍管理模塊:系統(tǒng)管理員根據(jù)學號為每個學生分配系統(tǒng)的登錄信息。學生將個人資料信息按照學籍內(nèi)容的要求輸入到數(shù)據(jù)庫,并根據(jù)實際情況對信息進行及時的修改,以確保信息的準確性。教師可在通過不同的條件查找學生的學籍信息,了解學生的基本情況。
(4)成績管理模塊:教師按照課程的考核要求進行不同方式的考試,考試結(jié)束后將學生的考試成績輸入到系統(tǒng),對有錯誤的成績數(shù)據(jù)進行編輯。學生參與課程學習并參加考試之后,能夠查閱自己的成績。
(5)德育管理模塊:教師負責錄入每位同學的德育評價等級,并對錄入有誤的評價等級進行編輯。學生能夠查閱每月的德育評價等級,從而端正自己的日常行為。
3.2 功能設(shè)計
學生信息管理系統(tǒng)在實際的使用過程中,主要有三類用戶:系統(tǒng)管理員、教師、學生,因此管理系統(tǒng)對應(yīng)地分為三類用戶端:系統(tǒng)管理員端、教師端、學生端。他們的功能權(quán)限分別是:
(1)系統(tǒng)管理員端:系統(tǒng)管理員在學生信息管理系統(tǒng)中的操作平臺,系統(tǒng)管理員進入該平臺后可以修改自己的登錄密碼,并進行登錄信息管理和課程信息管理兩個模塊的操作。
(2)教師端:教師用戶在學生信息管理系統(tǒng)中的操作平臺,教師進入該平臺后可以修改自己的密碼,查看課程信息和學生的學籍信息,并進行成績信息管理模塊和德育信息管理模塊的操作。
(3)學生端:學生用戶在學生信息管理系統(tǒng)中的操作平臺,學生進入該平臺后可以修改自己的密碼,編輯自己的學籍信息,并可查看考試成績和德育評價信息。
4 學生信息管理系統(tǒng)的實現(xiàn)
本學生信息管理系統(tǒng)采用 MVC架構(gòu)技術(shù),主要開發(fā)語言為,數(shù)據(jù)庫系統(tǒng)為SQL Server。
現(xiàn)以系統(tǒng)管理員端的課程信息管理功能的實現(xiàn)過程為例,介紹 MVC的開況。課程信息管理功能包括對課程信息的查詢、添加、修改和刪除。首先使用SQL Server創(chuàng)建課程信息表,包括字段課程編號、課程名稱、課程學分、課程類別、考試性質(zhì)、考試時間等。
(1) 模型(Model)的實現(xiàn):定義一個 實體數(shù)據(jù)模型,數(shù)據(jù)來源于課程信息表。
(2)控制器(Controller)的實現(xiàn):立一個控制器,用來實現(xiàn)課程信息管理模塊的查詢、添加、修改和刪除的功能的。
(3) 視圖(View)的實現(xiàn):創(chuàng)建cshtml頁面,用于顯示課程的基本信息,并提供管理操作以及相關(guān)的超鏈接。
4 結(jié)語
本文根據(jù)學校在學生信息管理中存在的問題,提出了采用 MVC框架開發(fā)較復(fù)雜的學生信息管理系統(tǒng),搭建了完整的基于 MVC框架結(jié)構(gòu)的信息管理系統(tǒng)。學生信息管理系統(tǒng)的應(yīng)用,給學校的學生信息管理工作帶來了改變,實現(xiàn)學生信息管理朝著規(guī)范化、科學化、現(xiàn)代化的方向轉(zhuǎn)變,提升學校的管理水平和工作效益。
參考文獻
[1]貢博文.淺談網(wǎng)站建設(shè)中MVC與三層架構(gòu)技術(shù)[J].科技風,2013.
[2]周文紅.基于 MVC框架的Web應(yīng)用開發(fā)[J].計算機與現(xiàn)代化,2013.
[3]沈偉.基于Web的高職學生信息管理系統(tǒng)的設(shè)計與實現(xiàn)[J].泰州職業(yè)技術(shù)學院學報,2014.
作者簡介
鄧俊英(1981-),廣東省佛山市人。大學本科學歷?,F(xiàn)為佛山市華材職業(yè)技術(shù)學校計算機中學一級教師。研究方向為計算機技術(shù)。
關(guān)鍵詞:MVC Struts Spring
0 引言
MVC框架是Xerox PARC在20世紀80年代為編程語言Smalltalk-80發(fā)明的一種軟件設(shè)計模式,其中M是指數(shù)據(jù)模型,V是指視圖界面,C是指控制器,使用MVC的目的是將數(shù)據(jù)模型和視圖界面實現(xiàn)代碼分離,從而使同一個應(yīng)用程序可以使用不同的表現(xiàn)形式,目前MVC在Java EE里已經(jīng)廣泛使用,并不斷有新的MVC框架。各個MVC框架都有各自的優(yōu)勢和不足,在進行項目開發(fā)的過程中,如何選擇一個合適開發(fā)框架就是需要重點考慮的問題,選擇了合適開發(fā)框架可以提高開發(fā)的效率。本文將主要對于目前最流行、最常用的兩類MVC框架Struts、Spring MVC進行簡要介紹,并對比兩者的不同之處。
1 struts簡介
Struts是Apache軟件基金下Jakarta項目的一部分。Struts框架的主要架構(gòu)設(shè)計和開發(fā)者是Craig R.McClanahan。Struts是目前Java Web MVC框架中不爭的王者。經(jīng)過多年的發(fā)展Struts已經(jīng)逐漸成長為一個穩(wěn)定、成熟的框架,并且占有了MVC框架中最大的市場份額。
1.1 struts的體系結(jié)構(gòu) struts是一個基于Sun J2ee平臺的MVC框架,它將Servlet和JSP標簽作為實現(xiàn)自身功能的一部分。MVC的每個特征Struts都有,而且還在他的基礎(chǔ)上有了進一步的創(chuàng)新,它的體系結(jié)構(gòu)如1-1所示。
圖1-1向我們展示了Struts的體系結(jié)構(gòu)的三部分:視圖(View),模型(Model)和控制器(Controller)。
視圖(View):Struts的視圖主要是JSP文件。Struts提供了許多定制JSP標簽,它們使用起來簡單、功能強大,在創(chuàng)建視圖界面的時候使用Struts標簽可達到事半功倍的效果。模型(Model):模型組件代表應(yīng)用的業(yè)務(wù)數(shù)據(jù)和邏輯。Struts中的系統(tǒng)模型的狀態(tài)主要由ActionForm Bean和值對象來體現(xiàn)。控制器(Controller):Struts的控制器主要是ActionServlet,但是操作業(yè)務(wù)邏輯的則是Action、ActionMapping和ActionForward,業(yè)務(wù)邏輯工作主要是在他們的相互作用下實現(xiàn)的。其中Action是真正的業(yè)務(wù)邏輯的實現(xiàn)者,ActionMapping與ActionForward的任務(wù)是指定不同的業(yè)務(wù)邏輯或流程的運行方向。
1.2 struts的工作原理 在Struts中,擔任控制器工作的是ActionServlet,所有的請求都會發(fā)送給ActionServlet,當ActionServlet接受到一個請求時,會根據(jù)URI來決定使用哪一個Action處理請求。如圖1-2所示:
在上圖中,當ActionServlet接受一個來自客戶端的請求時,執(zhí)行以下操作:①檢索和請求相匹配ActionMapping實例,若是匹配就進行下一步創(chuàng)建ActionForm,但是若不存在則返回請求路徑無效500錯誤信息。②檢查是不是存在ActionFrom實例,若不存在,就創(chuàng)建一個ActionForm 對象,在ActionFrom中保存好用戶提交的表單數(shù)據(jù)。③是否需要表單驗證(validate)是由其配置決定的,驗證時采用的是ActionForm的validate()方法。④ActionServlet從ActionMapping實例所包含的映射信息出發(fā),最終決定由哪個Action接收,如果不存在相應(yīng)的Action實例,那就要先創(chuàng)建一個合適的Action實例,然后調(diào)用Action的execute()方法。⑤Action的execute()方法返回一個ActionForward對象。ActionServlet把轉(zhuǎn)發(fā)給ActionForward對象指向的jsp組件。⑥ActionForward對象指向的jsp組件生成的動態(tài)網(wǎng)頁,返回給客戶端。
1.3 struts的優(yōu)缺點
1.3.1 優(yōu)點 ①實現(xiàn)MVC模式,結(jié)構(gòu)清晰,這樣開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實現(xiàn)。②可使用的tag有很多,Struts的標記庫(Taglib),如能靈活動用,就會使開發(fā)效率變得高很多。③頁面導(dǎo)航。這一功能在以后的發(fā)展中表現(xiàn)出了良好的前景,實際上,這樣可使系統(tǒng)的脈絡(luò)更清晰。④提供Exception處理機制。⑤數(shù)據(jù)庫鏈接池管理。⑥支持I18N。
1.3.2 缺點 ①Struts的Action必需是thread-safe方式,它要求只需一個實例處理全部請求。②Struts的每個Action都會跟Web層耦合起來,進行測試時離不開Web容器,也不容易進行單元測試。③Struts的FormBean將全部數(shù)據(jù)都看做String類型,它可借助工具Commons-Beanutils做類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級別,而且轉(zhuǎn)化的類型是不可配置的。不容易將類型轉(zhuǎn)化時的錯誤信息返回給用戶。④Struts處理Action時離不開ServletRequest 和ServletResponse,所以必須要有Servlet容器。⑤Struts創(chuàng)建一個Action,極其不容易控制它的執(zhí)行順序,而且要想實現(xiàn)這一功能,很可能需要重新去寫Servlet。⑥Struts處理Action以class的hierarchies為基礎(chǔ),不容易在action處理前和后進行操作。
關(guān)鍵詞:ThinkPHP MVC Bootstrap 招投標 架構(gòu)設(shè)計
中圖分類號:TP311.52 文獻標識碼:A 文章編號:1007-9416(2016)12-0165-01
1 招投標平臺的需求分析
本招投標平臺是建筑行業(yè)平臺級的產(chǎn)品,主要是服務(wù)建筑行業(yè)內(nèi)的專業(yè)性企業(yè)、個人以及專家,通過整合建筑行業(yè)資源、以建筑行業(yè)項目和服務(wù)為紐帶,致力解決行業(yè)項目和服務(wù)招投標不規(guī)范、不透明、交易成本高企的現(xiàn)狀。本文從功能性需求和非功能性需求兩個方面進行需求分析。
1.1 功能性需求分析
本招標平臺分為兩個主要流程:用戶注冊流程、招投標流程。(1)用戶注冊流程。用戶通過短信驗證碼注冊后,完善用戶資料,成為注冊用戶;用戶上傳照片或者掃描件進行身份和建筑行業(yè)資質(zhì)認證,平臺后臺認證后,用戶成為認證用戶;用戶繳納平臺會員費后成為VIP用戶。(2)招投標流程。用戶招標項目和招標文件,符合項目條件的用戶可以投標該項目,招標者在競標列表中選標,中標者實施該項目,完工后提交驗收、繳納專家審核費,專家確認是否驗收通過,最后由招標者決定項目是否結(jié)束。
1.2 非功能性需求分析
(1)終端設(shè)備支持。平臺可以支持PC端瀏覽器、手機瀏覽器以及微信端瀏覽。(2)安全要求。對于需要登錄后才能訪問的頁面要禁止非法訪問等。(3)性能要求。網(wǎng)絡(luò)正常的情況下,大于2MB/秒,1000人以下并發(fā)訪問頁面打開時間最多不超過5秒。
2 招投標平臺MVC框架的選擇
通過技術(shù)平臺選型,考察 MVC、Struts2、Spring MVC、ThinkPHP、Yii等多個MVC框架后,結(jié)合技術(shù)團隊能力、國內(nèi)流行程度等因素,將 MVC、Struts2、ThinkPHP作為備選技術(shù)方案。ThinkPHP中的MVC提供了一種敏捷開發(fā)的手段,使得開發(fā)者能夠迅速地開發(fā)出穩(wěn)定的企業(yè)級網(wǎng)站[1]。ThinkPHP在中小型應(yīng)用中,學習成本最低、開發(fā)效率最高,所以在國內(nèi)PHP MVC框架應(yīng)用中占據(jù)了將近50%的市場份額。本平臺是一個中等規(guī)模的網(wǎng)站,根據(jù)前述非功能性需求分析得出,并發(fā)訪問量要求不高,且用戶預(yù)算低、開發(fā)周期短,所以決定平臺采用ThinkPHP框架。
3 招投似教ǖ募芄股杓
3.1 平臺架構(gòu)的設(shè)計
為了進一步壓縮成本,縮短開發(fā)時間,從架構(gòu)設(shè)計上既要滿足前述用戶需求,又要減少開發(fā)工作量。因此平臺通過共用控制器和模型,采用多視圖的方法滿足用戶PC端、手機端、微信端瀏覽本平臺的需求,而前端則采用Bootstrap框架進行快速頁面布局和前端編程。Bootstrap是最受歡迎的HTML、CSS和JS框架,用于開發(fā)響應(yīng)式布局、移動設(shè)備優(yōu)先的WEB項目[2]。根據(jù)需求分析,本平臺部分技術(shù)架構(gòu)設(shè)計如圖1所示。
限于篇幅,本架構(gòu)主要展示了平臺Home前臺的架構(gòu)設(shè)計,前臺Home和后臺Admin共用Common\Model,前臺PC端View和移動端MobileView共用了前臺Controller,從而減少了開發(fā)冗余,提高了代碼復(fù)用率,大幅壓縮了開發(fā)成本和開發(fā)周期,提高了軟件質(zhì)量。
3.2 前臺控制器基類的實現(xiàn)
FrontController是前臺控制器的基類,只有一個方法_initialize,繼承該基類的前臺控制器都會執(zhí)行該方法。_initialize方法通過ismobile函數(shù)判斷,如果是手機端或者微信端瀏覽,則通過C(‘DEFAULT_V_LAYER’,’MobileView’)函數(shù)將默認視圖層從View目錄改成MobileView目錄,從而改成適合手機瀏覽的網(wǎng)頁,而控制器類和模型類無需修改。如果用戶沒有登錄,用戶訪問了需要登錄才能訪問的控制器方法,則將鏈接重定向登錄方法,強制用戶登錄。
4 結(jié)語
MVC輕量級ThinkPHP框架,基于面向?qū)ο蟮乃枷耄Y(jié)合使用了Ajax技術(shù),使整個系統(tǒng)功能清晰明了[3]。本平臺選擇ThinkPHP框架進行架構(gòu)設(shè)計,采用多個視圖共用一個控制器方法的方式支持多終端設(shè)備瀏覽器,滿足了招投標平臺的功能性需求和非功能性需求,提高了開發(fā)效率、縮短開發(fā)周期并節(jié)約開發(fā)成本,具有較好的技術(shù)推廣價值。
參考文獻
[1]徐誠斌,王金平.MVC在ThinkPHP框架中的應(yīng)用研究[J].信息與電腦:理論版,2011(3):160-160.
關(guān)鍵詞: WebForm;MVC;設(shè)計模式;三層架構(gòu);MVP
The Research Of MVC
Tu Gang Li Jian Liu Huaqing Ji Yongling Xu Zihao
(Jiangsu Vocational And Technical College Of Finance & Economics Jiangsu Huanai 223003)
Abstract: The essay describes the development of Microsoft's Web App Platform Stage and analyses of WebForm, MVC, Three Tiers and MVP. The essay recommendations to the picking of design pattern and software framework in the use of project, it introduces that what should be involved in View, Control and Model of MVC.
Keywords: WebForm, MVC, Design Pattern, Three Tiers, MVP
1 引言
MVC Framework是微軟官方提供的MVC模式,是編寫 Web應(yīng)用程序的一個框架。此前已習慣了運用 WebForm開發(fā)模式的設(shè)計人員運用MVC模式可能會有所困惑,為什么微軟推出 MVC Framework?同時,在 WebForm開發(fā)模式設(shè)計Web應(yīng)用程序開發(fā)時,設(shè)計人員可能會運用三層結(jié)構(gòu)架構(gòu)Web系統(tǒng),而MVC模式也是由三個事物組成,因此技術(shù)人員就會產(chǎn)生疑惑,容易將二者混為一談。
通過 WebForm、MVC、三層結(jié)構(gòu)以及MVP之間進行比較,為Web應(yīng)用程序開發(fā)人員在項目開發(fā)設(shè)計中選用不同的開發(fā)模式和軟件結(jié)構(gòu)來架構(gòu)系統(tǒng)提供了參考。同時結(jié)合江蘇省大學生實踐創(chuàng)新訓(xùn)練項目“基于 MVC的校內(nèi)大學生社區(qū)系統(tǒng)設(shè)計與實現(xiàn)”,介紹了 MVC在Web應(yīng)用程序系統(tǒng)開發(fā)中其View、Control和Model中應(yīng)包含哪些具體內(nèi)容,為 MVC的運用提供了借鑒的方法和技巧。
2 MVC與相關(guān)技術(shù)
2.1 MVC
MVC―― MVC的推出確實大大改變了Web App的開發(fā)方式,很多Web Form下的方式不被提倡了,如服務(wù)器端控件將被拋棄,轉(zhuǎn)而再次使用客戶端控件;事件驅(qū)動模型被拋棄,轉(zhuǎn)而使用了類似傳統(tǒng)的URL跳轉(zhuǎn)處理模型。而且在數(shù)據(jù)驗證等方式上與Web Form下提倡的方式有了很大變化。
MVC是1979年提出的,起初是用于軟件的一種架構(gòu)模式。模型-視圖-控制器(MVC)是Xerox PARC在上個世紀八十年代為編程語言Smalltalk-80發(fā)明的一種軟件設(shè)計模式[1],然后被推薦為Sun公司J2EE平臺的設(shè)計模式,并且受到越來越多的使用 Cold Fusion 和 PHP 的開發(fā)者的歡迎。
MVC (Model-View-Controller) 在 Java / JSP / J2EE 中已廣泛運用,并衍生出 Struts 等開放源碼的 Framework (框架)。其主要目的是為了在開發(fā)復(fù)雜的大型網(wǎng)站時,能將不同的功能作切割,提高程序代碼的可讀性,以及組件的可重用性。其結(jié)構(gòu)如圖1所示[1]。
2.2 ASP. NET MVC與WebForm
MVC與Webform技術(shù)的架構(gòu)如圖2所示[2]。
MVC將WebForm中的一個IHttpHandler換成了兩個IHttpHandler。Web Form中Page(IHttpHandler)既負責業(yè)務(wù)邏輯又負責顯示,在MVC中換成了兩個IHttpHandler,第一個Handler負責業(yè)務(wù)邏輯,第二個Handler(ASPX)是View,用于顯示的。在MVC中的業(yè)務(wù)實際執(zhí)行時間被提前到了HttpMolde中,而Web Form的請求只在httpHandler容器中被執(zhí)行。即MVC中Controller與View的分離是使用的請求管道隔離實現(xiàn)的,這樣在不影響效率(一次請求,而 MVC使用了HttpModules來攔截地址請求,具體用到了System.Web.Routing類庫(MVC2中)。在Application_Start時,UrlRoutingModule類攔截請求,給RouteTable的全局對象一個攔截的設(shè)置,設(shè)置使用RouteCollection對象進行保存,MVC對這個類進行了擴展――RouteCollectionExtensions??蛻粼L問頁面時,UrlRoutingModule類攔截請求,在RouteTable中查看是否符合規(guī)則,符合就調(diào)用MvcHandler。MvcHandler的ProcessRequest方法再調(diào)用Controller;從而達到代碼的邏輯層次上的分離,實現(xiàn)了Controller代碼的單獨管理。顯然MVC模式有利于理解分層邏輯,把握代碼的層次感。Controller到aspx頁面之間的過程,已經(jīng)被MVC框架隔離。至于Controller或者View頁面與Model調(diào)用的過程,則由開發(fā)人員來控制。
MVC縱向切割了開發(fā)過程中的代碼,從服務(wù)器到瀏覽器層層分離,層次之間耦合度很低,因為它是順著底層的開發(fā)脈絡(luò)進行封裝,所以有利于開發(fā)者對整個程序過程流轉(zhuǎn)的理解。但是MVC有一個非常大的缺點,這個缺點是和整個軟件發(fā)展思路相背離的,那就是它無法封裝,所以無法被重用。MVC只適合輕量級的開發(fā),桌面開發(fā)是極少用到的。Web開發(fā)恰恰就是輕量級,因為網(wǎng)絡(luò)硬件條件的限制,不需要也無法做到非常復(fù)雜的邏輯。這也是MVC非常非常適合Web開發(fā)的原因[3]。
WebForm中頁面請求則只在HttpHandler容器中執(zhí)行,對其進行分層,只能依靠邏輯上分離。Web Form模型中事件必須被注冊到頁面里,比如Button1_Click這樣的代碼。Page_Load方法在頁面裝載時執(zhí)行,而Button1_Click必須在客戶點擊后才能執(zhí)行;而顯示代碼被寫入Page_Load方法中,這就造成了需要編寫額外的代碼量,如if (!Page.IsPostBack)。而在Button1_Click執(zhí)行后如果需要顯示,則比較難處理。替代的解決方案是使用Response.Redirect,在一個aspx頁面中處理邏輯,處理后跳轉(zhuǎn)到另外一個顯示的頁面。這樣在兩個頁面中數(shù)據(jù)很難共享,加外跳轉(zhuǎn)時就會多一次請求。當然可通過Server.Execute,Server.Transfer或者Context.RewritePath等處理方式實現(xiàn)數(shù)據(jù)共享,兩個頁面轉(zhuǎn)換則在服務(wù)器端完成[4]。
通過分析可以知道,MVC框架在Web應(yīng)用開發(fā)方面具有很強的優(yōu)越性,而Web Form也有一定優(yōu)勢,在簡單的應(yīng)用中更加容易開發(fā)。WebForm也可實現(xiàn)和MVC一樣的分層方式,只是處理時需多寫一些代碼。用WebForm開發(fā)分層遇到的最大問題是頁面之間數(shù)據(jù)的傳遞。 MVC與WebForm比較起來,WebForm更容易理解,不會產(chǎn)生復(fù)雜的配置。
WebForm橫向切割了代碼,控制和顯示是封裝在一起的。從開發(fā)者思維邏輯上而不是實際情況上對代碼進行封裝,開發(fā)WebForm容易上手的原因也就在此了,但這不利于開發(fā)者對底層程序流轉(zhuǎn)機制的理解。WebForm中View和Controller是在一起的,WebForm出現(xiàn)后,誕生了大量的組件,這是MVC模式所不及的。微軟的經(jīng)驗之一是硬件發(fā)展很迅速。代碼的封裝是靠犧牲運行效率來提高開發(fā)效率,犧牲的運行效率通過提高硬件性能來解決。但這個經(jīng)驗不適合網(wǎng)絡(luò)硬件,網(wǎng)絡(luò)硬件要考慮兼容性而且是國家的基礎(chǔ)設(shè)施,更新的靈活性遠比單機要差??捎萌鐖D3來說明[4]。
2.3 ASP. NET MVC與三(N)層架構(gòu)
N層結(jié)構(gòu)是一種軟件抽象的層次結(jié)構(gòu),是對復(fù)雜軟件的一種縱向切分,每一層次中負責同一類型的操作,以便將各種代碼以其負責的功能作為依據(jù)來分割,以降低軟件的復(fù)雜度,提高其可維護性。一般來說,層次之間是向下依賴的,下層代碼未確定其接口(契約)前,上層代碼是無法開發(fā)的,下層代碼接口(契約)的變化將使上層的代碼一起變化。三層結(jié)構(gòu)是N層結(jié)構(gòu)的一種,是人們在長時間使用中得出來的一種應(yīng)用場合廣泛的N層結(jié)構(gòu),被當作一種典型的軟件層次結(jié)構(gòu)而廣為流傳。這里所說的三層架構(gòu)[1]指:表現(xiàn)層(顯示層)、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層(持久化),如圖4所示。
MVC中的三種構(gòu)造型元素之間并不存在明顯的層次結(jié)構(gòu),沒有明顯的向下依賴關(guān)系,相反的,View和Model往往是比較獨立的,而Control是連接兩者的橋梁;MVC中每個塊可以獨立測試的。而三層結(jié)構(gòu)中,上層模塊的運行或測試都必須要提供下層代碼或者提供相應(yīng)接口。相對來說,MVC復(fù)雜得多,但是結(jié)構(gòu)更清晰,耦合性更低。MVC中每一塊內(nèi)部(特別是Model)常被設(shè)計為多層。一個良好的MVC模式構(gòu)建的結(jié)構(gòu)中,Control是核心,小且較為穩(wěn)定的,可作為一個核心框架來提供,并提供擴展點,只需要簡單配置就可以運行。而View則可能是一套或多種供選擇的視圖引擎,決定了系統(tǒng)展示給用戶的界面,使用時的主要工作量在于擴展點以及根據(jù)需要而設(shè)計的視圖模板。Model則是業(yè)務(wù)提供者,決定了系統(tǒng)提供的功能,其內(nèi)部可能是一些普通的類或是實現(xiàn)了某些接口的類,對于復(fù)雜的軟件可能會分成很多層,如業(yè)務(wù)邏輯層、業(yè)務(wù)提供層、系統(tǒng)提供層、數(shù)據(jù)提供層、數(shù)據(jù)訪問層等。MVC與三層架構(gòu)之間的關(guān)系如圖5所示[5]。
2.4 MVP與MVC
隨著和Windows窗體用戶界面創(chuàng)建技術(shù)越來越強大,讓用戶界面層負責多于它本應(yīng)做的事是很常見的。沒有一個清晰的職責劃分,界面層經(jīng)常淪為一個包含實際上應(yīng)屬于程序其他層的邏輯的容器。有一個稱為:模型(Model)-視圖(View)-提供器(Presenter)的設(shè)計模式(MVP),特別適合解決這個問題。
MVP設(shè)計模式將界面層中的邏輯和代碼重構(gòu)為更加易于測試的、新型的、可重用的代碼。MVP即可以應(yīng)用到Web項目中,也可以應(yīng)用到Windows Form項目中,MVP方便測試機制為大型復(fù)雜的企業(yè)級應(yīng)用開發(fā)帶來極大的方便,MVP模式有Model-Presenter-View三個層次,如圖6所示。其中Controller層是負責狀態(tài)保存和頁面跳轉(zhuǎn)的,可根據(jù)需要進行設(shè)置。
MVP模式中Model、Presenter與View的關(guān)系如圖7所示,Model并不與View直接通信,Presenter將充當中間角色。在MVC中,當Model被Controller更新后,會直接通知View并更新顯示。從兩者模式圖中發(fā)現(xiàn)MVP與MVC最大的一個區(qū)別就是Model與View層之間是否存在通信(甚至雙向通信)。在MVP模式下的Presenter擁有“絕對權(quán)力”。如果沒有它,Model與View就是兩個孤島,完全解耦了的。因此MVP中的View只從實現(xiàn)相應(yīng)IView接口中的屬性和方法,而最終調(diào)用IView接口下的哪個視圖實例則完全交給Presenter。
Supervising Controller模式是對MVP模式作了一定變動,如圖8所示。與圖7所示的MVP模式主要有以下區(qū)別。
(1) Presenter實現(xiàn)復(fù)雜的View邏輯;(2) View實現(xiàn)部分邏輯;(3) View可以與Model綁定,Model的變化可以通知View;(4) 這種模式下,Presenter和View是松耦合,Presenter可以和多個View直接通信。
Supervising Controller模式其實很接近于MVC模式,只是提供了Presenter與View之間的“雙向通信”。
3 MVC在項目中的應(yīng)用
MVC模式中,View中的邏輯比較簡單,重點放在Model中,而Controller是對業(yè)務(wù)流程的控制,應(yīng)該保持“代碼清爽”。業(yè)務(wù)邏輯是系統(tǒng)架構(gòu)中體現(xiàn)核心價值的部分,主要集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計。View是顯示邏輯,Controller是流程控制邏輯,Model是“邏輯大本營”。使用 MVC 框架時要將“經(jīng)常變化”的業(yè)務(wù)規(guī)則(位于Controller)和相對穩(wěn)定的業(yè)務(wù)邏輯(位于Model)分離開。為適應(yīng)不斷變化的業(yè)務(wù)需求,在Model層采用接口方式實現(xiàn)。
“基于 MVC的校內(nèi)大學生社區(qū)系統(tǒng)設(shè)計與實現(xiàn)”省大學生實踐創(chuàng)新訓(xùn)練項目中主要運用Robustness分析方法,找出哪些對象應(yīng)放在Model中,哪些屬于控制邏輯。Robustness分析方法將系統(tǒng)中的對象分為實體對象、邊界對象和控制對象。
(1)實體對象(entity object)。
通常是來自域模型中的對象(也就是現(xiàn)實世界),它常對應(yīng)于數(shù)據(jù)庫表和文件,這些數(shù)據(jù)表和文件中存儲了執(zhí)行用例所需的數(shù)據(jù)。有些實體對象是臨時“對象”(如搜索結(jié)果),當用例結(jié)束后將消失。
(2)邊界對象(boundary object)。
參與者使用它來同系統(tǒng)交互,通常包含窗口、屏幕、對話框和菜單。如果有GUI原型,就可知道許多主要的邊界對象。
(3)控制對象(control object)。
將邊界對象和實體對象關(guān)聯(lián)起來(通常被稱為控制器,因為它們通常不是真正的對象),包含大部分應(yīng)用邏輯,它們在用戶和存儲的數(shù)據(jù)之間架起一座橋梁??刂茖ο笾邪?jīng)常修改的業(yè)務(wù)規(guī)則和策略。這樣修改時只需要在這些對象中進行,而不會涉及到用戶界面和數(shù)據(jù)庫模式??刂破髋紶栆矔窃O(shè)計中的“真正對象”,但大部分控制器只是一個占位符,用于避免遺漏用例要求的任何功能和系統(tǒng)行為。
實體對象、邊界對象和控制對象分別對應(yīng)MVC的Model、View、Controller三種構(gòu)造型元素。對象的劃分有四個交互規(guī)則。
(1) 參與者只同邊界對象交互;(2) 邊界對象只能同控制器和參與者交互;(3) 實體對象只能同控制器交互;(4) 控制器可同邊界對象,實體對象以及其他控制器交互,但不能同參與者交互。
四個規(guī)則可描述為:邊界對象和實體對象都是名詞,而控制器是動詞。名詞和名詞之間不能交互,但動詞之間可以。
4 結(jié)束語
微軟公司推出 MVC Framework讓Web開發(fā)設(shè)計人員多了一個選擇。文章對WebForm、 MVC和MVP三種軟件模式和三層架構(gòu)進行了分析,對軟件模式的選擇提出了參考性的建議,在項目開發(fā)過程中,結(jié)合具體情況選擇能充分發(fā)揮該模式優(yōu)點和項目開發(fā)人員自身特長的軟件模式。具體介紹了 MVC中Model,View和Controller三種構(gòu)造型元素各應(yīng)包含哪些內(nèi)容。
MVC Framework推出時間較短,對 MVC Framework研究處于了解、運用階段。并且,微軟公司必將推出 MVC Framework的更多模板,因此,還存在許多問題需要進一步探討和研究。
參考文獻
[1]Buschmann et al. Pattern-Oriented Software Archtiecture. John Wiley & Sons,1996,pp. 125-143.
[2]/mvc/whatisaspmvc/
[3]/zh-cn/magazine/dd252940.aspx
[4]/zh-cn/magazine/dd252940.aspx
[5]/zh-cn/library/ms978748.aspx
關(guān)鍵詞:MVC模式;數(shù)據(jù)查詢;優(yōu)化設(shè)計;Hibernate
1 MVC框架模式
MVC(Model-View-Controller)框架模式通過模型、視圖、控制器,分別對程序的輸入、處理和輸出進行控制,三者相互獨立,不會因為其中一項的改變而影響其他內(nèi)容的變化。其中,模型可以為視圖提供數(shù)據(jù),同時進行業(yè)務(wù)邏輯關(guān)系的處理;視圖用于接收命令和顯示相應(yīng)的數(shù)據(jù);控制器則專門控制用戶的輸入和輸出。如圖1所示:
2 數(shù)據(jù)查詢設(shè)計
原始的Web程序開發(fā)以服務(wù)器端開發(fā)為主,在程序設(shè)計中,以獨立編寫的SQL命令語句直接對數(shù)據(jù)庫進行查詢,這種命令語句直接編寫在頁面代碼中,甚至數(shù)據(jù)庫的賬戶密碼都暴露給程序閱讀者,很容易被他人所用,給程序的安全性造成很大的隱患。
JAVA提供的Web開發(fā)JSP+Servlet+JavaBean可以在一定程度上解決上述問題,它是用JavaBean來封裝邏輯程序、用戶參 數(shù)及賬戶密碼,以JSP顯示程序輸出結(jié)果,大大提高了程序設(shè)計的安全性。其實現(xiàn)方式及對應(yīng)的MVC模式如圖2所示:
如上圖所示,以Servlet控制用戶請求、顯示響應(yīng)結(jié)果,在接受用戶請求時,以參數(shù)作為用戶請求的載體,將參數(shù)的安全性驗證設(shè)計到業(yè)務(wù)邏輯中,即在JavaBean中內(nèi)置變量,其方法中的變量userpassWord即用戶輸入的密碼驗證程序如下:
String userpassWord;
public void setUserpassWord(String s)
{
userpassWord=s;
}
public String getUserpassWord()
{
return userpassWord;
}
sql.executeQuery("select * from user WHERE userpassword='"+userpassWord+"'");
用戶名及其他參數(shù)類同,這種通過Servlet只調(diào)取JSP中的參數(shù),在封裝的JavaBean中進行參數(shù)處理,然后對數(shù)據(jù)庫進行查詢進而核對參數(shù)正確性的驗證方法,在很大程度上保障了程序和數(shù)據(jù)庫的安全性。
3 數(shù)據(jù)優(yōu)化設(shè)計
在對龐大的高校一卡通數(shù)據(jù)進行查詢功能設(shè)計中會面臨諸多難題:其中最為常見的就是為了數(shù)據(jù)序列的一致性,需要分析數(shù)據(jù)對象持久性;要處理好以上問題,就要借助MVC框架模式來進行程序優(yōu)化設(shè)計,同時借助Hibernate的作用,Hibernate包含6個核心接口:Session、SessionFactory、Transaction、Criteria、Query和Configuration,這6個核心接口應(yīng)用甚廣,可以把數(shù)據(jù)對象進行模型化存儲,將數(shù)據(jù)信息儲存到本地磁盤后,根據(jù)實體類進行數(shù)據(jù)關(guān)系映射,對持久化對象進行存取,從而能夠保證在處理數(shù)據(jù)對象時保證數(shù)據(jù)序列的一致性。
例如應(yīng)用程序通過Hibernate保存java.sql.Clob實例時,必須包含兩個步驟:(1)保存一個空的Clob實例在數(shù)據(jù)庫事務(wù)中,(2)鎖定此記錄,更新保存的Clob實例,把長文本數(shù)據(jù)寫入Clob實例中,其代碼如下:
…
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
Customer customer = new Customer();
customer.setDescription(Hibernate.createClob("")); //先保存一個空 的clob
session.save(customer);
session.flush();
//鎖定此記錄
session.refresh(customer,LockMode.UPGRADE);
oracle.sql.CLOB clob = (oracle.sql.CLOB) customer.getDescription();
java.io.Writer pw = clob.getCharacterOutStream();
pw.write(longText);//longText為長文本字符串
pw.close();
mit();
session.close();
在處理數(shù)據(jù)類型的問題上,Hibernate通過內(nèi)置的映射類型和客戶化映射類型來實現(xiàn),內(nèi)置映射類型可以將一些常見的JAVA類型映射到相應(yīng)的SQL類型,用戶還可以實現(xiàn)UserType和CompositeUserType接口,從而靈活地定制客戶所需映射類型。
通過以上實例可以看出,Hibernate主要是作為數(shù)據(jù)持久性框架來使用,其對應(yīng)MVC模式中的模型,它的主要作用是處理事務(wù)流程,把數(shù)據(jù)庫中的關(guān)系表通過ORM映射為對象,將常用的數(shù)據(jù)查詢程序?qū)?yīng)到一個控制器,從而達到封裝和優(yōu)化的目的。
參考文獻:
關(guān)鍵詞:SSHJ2EE框架技術(shù)
SSH是一種基于J2EE技術(shù)的MVC軟件開發(fā)框架,它可以大大降低J2EE程序開發(fā)的難度,提高開發(fā)效率?本文試圖通過對SSH框架的組成與功能進行深入的分析,揭示其較傳統(tǒng)J2EE開發(fā)工具的先進之處。
1. SSH框架技術(shù)簡述
集成SSH框架的系統(tǒng)從職責上分為四層:表示層、業(yè)務(wù)邏輯層、數(shù)據(jù)持久層和域模塊層,以幫助開發(fā)人員在短期內(nèi)搭建結(jié)構(gòu)清晰、可復(fù)用性好、維護方便的Web應(yīng)用程序。其中使用Struts作為系統(tǒng)的整體基礎(chǔ)架構(gòu),負責MVC的分離,在Struts框架的模型部分,利用Hibernate框架對持久層提供支持,業(yè)務(wù)層用Spring支持。相比傳統(tǒng)的J2EE開發(fā)工具,它具有一系列獨特的優(yōu)點?
首先,SSH框架能夠有效的降低開發(fā)成本?縮短開發(fā)周期?SSH作為一款開源的框架,無需部署在成本極高的大型服務(wù)器上,很多時候只需要配合APACHE一類較便宜的服務(wù)器使用。
其次,SSH作為一款輕量級的框架可以有效降低系統(tǒng)開銷,同時它還可以與異步JavaScript和XML框架同時使用,不僅能夠?qū)τ脩趔w驗產(chǎn)生極大的改善,且有助于提升系統(tǒng)性能。
最后,由于SSH框架建立于J2EE的基礎(chǔ)之上,所以其同時具備了J2EE的安全性與跨平臺優(yōu)勢?同時由于其往往將組件相關(guān)的配置與關(guān)系寫入XML配置文件,使其在面對需求變化時可通過簡單的對配置信息的修改來加以實現(xiàn)而無需對系統(tǒng)進行大的修改。2. 表示層框架Struts簡介
最初Struts于2002年問世的時候,由于其創(chuàng)始人希望其能夠?qū)撕瀻炫cJSP等開發(fā)技術(shù)有所助益,所以它被設(shè)計成了一個開源項目。它很好的對MVC系統(tǒng)的開發(fā)提供了底層支持,有效的縮短了運用MVC模型對WEB應(yīng)用的開發(fā)周期,最終成為了MVC模式事實上的行業(yè)標準。
Struts由四個組件協(xié)同工作,其中ActionServlet類是中央控制器,在每個項目中唯一存在。而Action作為分控制器對具體流程進行實際上的控制,調(diào)用相應(yīng)的業(yè)務(wù)邏輯模塊來實現(xiàn)功能并送出結(jié)果?ActionMapping作用是幫助控制器將請求映射到操作,ActionForm的作用則是接受和存儲表示層中接受的數(shù)據(jù)。這四部分共同實現(xiàn)了Struts框架對流程的控制,
由于Struts框架屬于開源項目,這給了我們深入理解其內(nèi)部實現(xiàn)機制的機會?總體而言,Struts的優(yōu)勢很明顯?它的優(yōu)點在于它擁有大量的成功案例可供開發(fā)者借鑒?同時提供了豐富的標記庫(Taglib),可大大提高開發(fā)的效率?而它將表現(xiàn)與邏輯分離的做法,使得結(jié)構(gòu)更加清晰,有助于開發(fā)者將精力集中于業(yè)務(wù)邏輯的實現(xiàn)?最后,它具有優(yōu)秀的頁面導(dǎo)航功能,這對后期的維護有著不可估量的好處。3. 持久層框架Hibernate簡介
Hibernate是一款開源的對象——關(guān)系映射框架,它對JDBCAPI進行了極其輕量級的對象封裝,從而極大的擴展了開發(fā)人員對數(shù)據(jù)庫的操縱程度,同時它封裝了數(shù)據(jù)訪問的細節(jié),使得開發(fā)者可以將更多的精力集中在業(yè)務(wù)邏輯上。
Hibernate有6個核心接口,分別是擁有負責將其初始化的SessionFactory接口,負責執(zhí)行被持久化對象的CRUD操作的Session接口,負責事務(wù)相關(guān)的操作的可選接口Transaction以及負責執(zhí)行各種數(shù)據(jù)庫查詢Query接口與Criteria接口?Hibernate通過這些接口,對持久化對象進行各種存取操作并進行事務(wù)控制。
Hibernate主要有四塊內(nèi)容:持久化類PO,它是數(shù)據(jù)庫表的一個映射,是Hibernate的操作對象,而操作結(jié)果會反映到對應(yīng)的數(shù)據(jù)庫表中,映射文件XMLMapping,它存放著PO和數(shù)據(jù)庫表的映射信息,如表名和類名的對應(yīng),PO的屬性與數(shù)據(jù)庫表中字段的對應(yīng),hibernate.cfg.xml,存放著連接數(shù)據(jù)庫的配置信息已經(jīng)映射文件的路徑,在Hibernate初始化時Configuration會加載該文件信息到計算機內(nèi)存,并創(chuàng)建一個SessionFactory對象,把讀入的配置信息拷貝到SessionFactory對象的緩存中,HibernateAPI,主要是前文中所述的六大接口,彼此配合最終實現(xiàn)Hibernate對PO的各種操作并持久化到數(shù)據(jù)庫中。4. Spring框架簡介
Spring框架提供了一種能夠完全獨立于各種應(yīng)用服務(wù)器并可與現(xiàn)有框架無縫整合的解決方案,其主要通過控制反轉(zhuǎn)與面向方面編程兩種方式來進行實現(xiàn),其主要優(yōu)點在于無論你是否使用了EJB,SPRING都能夠有效的對你的中間層對象進行組織,它為數(shù)據(jù)存取提供了一個統(tǒng)一的框架,并能夠以一種統(tǒng)一的方式對不同的程序與項目的配置文件進行處理,它是一個全面的解決方案,包括了非常豐富的內(nèi)容,包括視圖層?模型層?數(shù)據(jù)層等,它提供了很多原來只有EJB能提供的功能(如聲明式事務(wù)管理),卻又無須運行在EJB容器上。
Spring框架由七個有著明確定義的模塊組成,其中SpringCore是它的基礎(chǔ)部分,是控制反轉(zhuǎn)的承載容器?而在此基礎(chǔ)上衍生出來的SpringAOP則提供了對面向類編程的支持,Springweb與Springorm則分別提供了對MVC框架與ORM框架的支持,SpringDAO則簡化了JDBC編程,使代碼更健壯,SpringContext作為一個強大的集成工具箱,有利于進行企業(yè)級程序的開發(fā),而相比之下,SpringWebMVC則聲名不彰,盡管它作為一款MVC框架提供了比Struts更自由的配置度但卻未能得到廣泛的應(yīng)用,以上七個模塊均可單獨或聯(lián)合實現(xiàn),具有較高的自由度。5. 使用Spring對Struts與Hibernate加以整合
我們從前文中可以清晰的看到,Struts是目前應(yīng)用于MVC框架中的業(yè)界實際標準,其具備高度的可靠性與穩(wěn)定性,同時將表現(xiàn)與邏輯分離,從而使得結(jié)構(gòu)更加清晰?同時提供了豐富的標記庫(Taglib)與頁面導(dǎo)航,大大提高了開發(fā)的效率與易維護性,但是在模型層卻缺少相應(yīng)的實現(xiàn)。
而Hibernate作為目前業(yè)界最成熟的持久層框架之一,封裝了數(shù)據(jù)訪問的細節(jié),使得開發(fā)者可以將更多的精力集中在業(yè)務(wù)邏輯上,極大的提高了開發(fā)效率。
SSH框架的指導(dǎo)思想就是將這兩個框架有機的整合在一起,充分發(fā)揮出二者各自的優(yōu)點, Spring通過Springweb與SpringORM兩個模塊分別對Struts和Hibernate兩個框架進行了整合,為企業(yè)級的應(yīng)用程序提供了一套模塊化的一攬子解決方案,在讓前者發(fā)揮出其對程序流程的良好控制作用的同時讓后者負責數(shù)據(jù)庫的訪問,以達到優(yōu)勢互補、降低開發(fā)難度、提高開發(fā)效率的目的。
關(guān)鍵詞:電商系統(tǒng); Spring框架; MVC; 數(shù)據(jù)庫設(shè)計; 分頁顯示
中圖分類號:TP393 文獻標識碼:A文章編號:2095-2163(2014)04-0009-05
Abstract:In current e-commerce systems, due to the broadness of user query, database queries often get a large number of eligible query results. For the purpose of quickly respond to user queries, during the process of database design and access, in addition to a reasonable indexing mechanism, the query results display must be paged display. With improved Spring MVC framework, the Bo-layer is added between JSP-layer and Controller-layer, whose main role is as a parameter package. Also, from database generating, business logic configuration, Dao-layer design, Service-layer design, Controller-layer design, Bo-layer design, Jsp-layer design and so on, the paper optimizes data access process. After that , through experimental analysis, compared with traditional paging method, this method has obvious advantages in the aspects such as average response time, a clear frame hierarchy and good portability.
Key words:E-commerce System; Spring Framework; MVC; Database Design; Pagination Display
0引言
隨著電子商務(wù)系統(tǒng)規(guī)模的增加,涉及訪問的數(shù)據(jù)量可能會達到上萬甚至是百萬條,為保證用戶瀏覽數(shù)據(jù)的體驗效果、提升Web服務(wù)器的響應(yīng)速度并減輕服務(wù)器的通信負載,就必須對查詢數(shù)據(jù)進行分頁顯示。
在國內(nèi)外的應(yīng)用研究中,已提出了有關(guān)分頁顯示的多種方案,常見的方法有SQL分頁算法、JSP分頁方法、使用標簽庫、將查詢結(jié)果緩存在HttpSession或變量中實現(xiàn)分頁等,但在實際應(yīng)用中卻都存在一定的不足和缺陷。具體分析如下。
(1)直接利用數(shù)據(jù)庫管理系統(tǒng)提供的分頁功能來實現(xiàn)數(shù)據(jù)分頁。該方法雖然可以提高性能,但不同數(shù)據(jù)庫實現(xiàn)的方法各不相同,因而對于不同的項目缺乏通用性。
(2)將查詢結(jié)果緩存在HttpSession或變量中實現(xiàn)分頁。此方法雖然可以減少數(shù)據(jù)庫的連接次數(shù),但卻會占用大量Web容器內(nèi)存[1],而且會導(dǎo)致用戶查看到的可能是過期數(shù)據(jù)。
(3)直接在數(shù)據(jù)庫上建立游標,使用ResultSet移動游標實現(xiàn)分頁,使游標定位結(jié)果集。這種方式在操作大型數(shù)據(jù)和訪問用戶眾多的時候,卻可能導(dǎo)致DBMS因為資源耗盡而崩潰[2]。
2基于Spring MVC分頁方案
5結(jié)束語
本文針對電子商務(wù)系統(tǒng)中,用戶查詢條件寬泛導(dǎo)致出現(xiàn)大量符合條件的查詢結(jié)果的問題,提出了利用改進的Spring MVC框架實現(xiàn)分頁的方法。首先,利用Spring MVC框架,實現(xiàn)了表示層、業(yè)務(wù)層和邏輯層的分離;其次,在傳統(tǒng)框架基礎(chǔ)上做出改進,加入Bo層,對數(shù)據(jù)進行封裝,縮短數(shù)據(jù)傳輸時間。本文的測試分析結(jié)果顯示,該方法具有響應(yīng)時間短、移植性高的優(yōu)點。
但本文提出的方法也存在不足,當商品輸入為海量數(shù)據(jù)時,其響應(yīng)時間就會較長,下一步將針對此現(xiàn)象作出改進。其后的工作重點還包括將提出的分頁技術(shù)實現(xiàn)相應(yīng)的模塊化,可以被不同項目直接調(diào)用。此外,對于頻繁讀取的數(shù)據(jù),可將符合條件的數(shù)據(jù)全部讀取至Web服務(wù)器,并在其上生成一個XML文件,則客戶端即可直接和XML文件實現(xiàn)交互[7],雖然此方法已經(jīng)實現(xiàn),但仍存在可完善的空間,這也是未來工作的一個研究重點。
參考文獻:
[1]何玲娟,蟻 龍,劉連臣. 一種松耦合高復(fù)用 MVC 模式的 Web 分頁實現(xiàn)[J]. 計算機工程與應(yīng)用,2007,43( 15) : 95 -97.
[2]崔行臣,張明光. 一種基于Struts框架的Web分頁模型的設(shè)計與實現(xiàn)[J]. 山東科學, 2013, 26(4):60-64.
[3]丁振凡. 利用Spring MVC實現(xiàn)數(shù)據(jù)分頁顯示處理[J]. 智能計算機與應(yīng)用. 2012,2(5):20-22.
[4]陳雄華, 林開雄. Spring 3.x 企業(yè)級應(yīng)用開發(fā)實戰(zhàn)[M]. 北京:電子工業(yè)出版社, 2013.
[5]Naveen Balani, Spring系列:Spring框架簡介. [EB/OL]. http:///developerworks/cn/java/wa-spring1/, 2005-08-18.
關(guān)鍵詞:Flex;RIA;框架;ActionScript;MVC
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2011)16-3848-02
雖然基于HTML的應(yīng)用程序具有部署成本低、結(jié)構(gòu)簡單、易學易用等優(yōu)點,但某些應(yīng)用系統(tǒng)并不適合采用HTML技術(shù),因為這些復(fù)雜的應(yīng)用系統(tǒng)要求多次提取網(wǎng)頁來完成一項事務(wù)處理,這往往導(dǎo)致交互速度變得非常慢,因此,傳統(tǒng)的Web技術(shù)已經(jīng)不能滿足網(wǎng)絡(luò)用戶全方位、高標準的網(wǎng)絡(luò)體驗要求了。RIA(Rich Internet Application,富因特網(wǎng)應(yīng)用程序)的出現(xiàn)就是為了解決這個問題,RIA無需刷新全頁,不增加帶寬,而可以迅速響應(yīng)用戶的輸入并做出相應(yīng)的處理。
Flex技術(shù)是目前最流行、使用最廣泛的RIA開發(fā)技術(shù)之一。2004年Macromedia推出被收購前的最為經(jīng)典的版本Flash MX 2004,在這個版本中ActionScript升級為2.0版本,同時第一次引入了Flex的概念,即Flex 1.0。2005年12月Adobe收購Macromedia公司,由此帶了的巨大變革,Adobe將其打造為新一代的RIA。在2006年7月了Flex 2.0,2008年2月Flex 3.0。Flex將基于標準的語言和各種可擴展用戶界面及數(shù)據(jù)訪問組件結(jié)合起來,使開發(fā)人員能夠快速構(gòu)建具有豐富數(shù)據(jù)演示、強大客戶端邏輯和集成多媒體的應(yīng)用程序。使用Flex構(gòu)建的應(yīng)用程序能夠在所有常見桌面平臺上運行,支持對應(yīng)用程序外觀進行完全自定義,并支持各種連接到后端數(shù)據(jù)和服務(wù)的方法。
1 Flex技術(shù)
Flex 是一個高效、免費的開放源框架,可用于構(gòu)建具有表現(xiàn)力的Web應(yīng)用程序,這些應(yīng)用程序利用Adobe Flash Player和Adobe AIR, 運行時跨瀏覽器、桌面和操作系統(tǒng)實現(xiàn)一致的部署。使用 Flex 創(chuàng)建的 RIA 可運行于使用 Adobe Flash Player 軟件的瀏覽器中,它們可以跨所有主要瀏覽器、在桌面上實現(xiàn)一致的運行。連接到 Internet 的計算機中超過 98% 裝有 Flash Player,這是一個企業(yè)級客戶端運行時,它的高級矢量圖形能處理要求最高、數(shù)據(jù)密集型應(yīng)用程序,同時達到桌面應(yīng)用程序的執(zhí)行速度。通過利用 AIR,F(xiàn)lex 應(yīng)用程序可以訪問本地數(shù)據(jù)和系統(tǒng)資源。
Macromedia Flash是強大的矢量動畫編輯工具,在做動畫起家之后,F(xiàn)lash一直在謀求RIA(rich internet application)富客戶端的霸主地位,最有影響的是,已經(jīng)推出了面向?qū)ο蟮木幊棠_本ActionScript3.0,并且建立起類似于java swing的類庫和相應(yīng)component(組件)。Flex是通過java或者.net等非Flash途徑,解釋.mxml文件組織components,并生成相應(yīng)的.swf文件。Flex的component和flash的component很相似,但是有所改進增強。目前Macromedia公司已經(jīng)被ADOBE公司收購。當前(2010年12月)的flex版本為4.1。
1.1 Flex框架結(jié)構(gòu)
Flex框架結(jié)構(gòu)如圖1所示。Flex編譯器Flex Builder x.0將MXML、ActionScript以及一些Flex類庫編譯成SWF文件,然后在客戶端由FlashPlayer執(zhí)行該SWF文件,實現(xiàn)對應(yīng)用的訪問。
1.2 Flex技術(shù)元素
Flex是一套Adobe的RIA技術(shù)的集合,F(xiàn)lex應(yīng)用在多層架構(gòu)中做為表示層。Flex包括:Flex SDK、Flex Builder、Flash Player、LiveCycle Data Service、ActionScript、MXML。
1)MXML。MXML是宣告式的、基于XML描述應(yīng)用程序界面的語言,用來表達UI布局和相關(guān)動作;
2)ActionScript。符合ECMA(歐洲計算機制造商協(xié)會)標準的腳本語言,負責處理業(yè)務(wù)邏輯和業(yè)務(wù)建模;
3)Flex SDK。就如同Java的JDK一樣,為開發(fā)人員提供了一個免費的開發(fā)套件,同時這也是一套開源項目;
4)通信服務(wù)。Flex支持Adobe公司自定義的通信協(xié)議AMF,它能夠?qū)lash/Flex對象快速序列化、反序列化,采用二進制壓縮傳輸數(shù)據(jù),具有數(shù)據(jù)安全性高、傳輸快的優(yōu)點。
1.3 Flex應(yīng)用開發(fā)步驟
首先建立一個包含應(yīng)用程序源代碼的文本文件(MXML格式文件和actionScript腳本文件),然后通過編譯器編譯成可執(zhí)行的swf文件,將此文件部署到服務(wù)器上。需要數(shù)據(jù)訪問時,F(xiàn)lex可以輕松地通過 Web 服務(wù)、Java 對象訪問或XML 來實現(xiàn)數(shù)據(jù)交互。具體開發(fā)步驟如下:
1)在文本編輯器或集成開發(fā)環(huán)境中插入MXML標簽;
2)添加一個或多個容器;
3)在容器中添加控件;
4)定義一種數(shù)據(jù)模型;
5)添加一個Web服務(wù)器;
6)為數(shù)據(jù)輸入添加驗證;
7)為組件添加腳本;
8)將應(yīng)用程序編譯成SWF文件。
2 Flex的MVC框架
目前,F(xiàn)lex的MVC框架有:Cairngorm、PureMVC、Model-Glue、Guasax和Meta等,每種MVC框架都有各自的優(yōu)缺點,因此如何選擇框架,對提高團隊的開發(fā)效率,使代碼易于維護、擴展和重用就顯得至關(guān)重要,可以從可實現(xiàn)性、擴展性和靈活性等方面來選擇框架。
1)Cairngorm開發(fā)框架
Cairngorm是最老也最成熟的Flex框架。它現(xiàn)在由Adobe擁有并開源,而且被Adobe的RIA顧問服務(wù)團隊大量使用。創(chuàng)造出Cairngorm的AdobeConsulting團隊是把設(shè)計模式框架運用到RIA開發(fā)的最早的倡導(dǎo)者。Cairngorm中可以看到許多在JEE世界中廣泛使用的MVC相關(guān)設(shè)計模式,即使它只是一個僅用于RIA用戶界面開發(fā)的微型架構(gòu)框架。
Cairngorm被看作是企業(yè)RIA開發(fā)框架。它的分層MVC實現(xiàn)有助于開發(fā)出具有復(fù)雜的業(yè)務(wù)邏輯的可伸縮的RIA應(yīng)用。在異步通信、事件驅(qū)動、無線程的Flex平臺上,Cairngorm為構(gòu)建嚴肅的商業(yè)應(yīng)用程序提供了快速而可靠的方法。
2)PureMVC框架
它實際上是一個ActionScript3框架。與Cairngorm不同,它完全不依賴任何Flash、Flex或其他Adobe的AS3類。因此它可用于開發(fā)任何基于Flash或者ActionScript3的應(yīng)用程序。
從PureMVC的名字中就可以看出,它是根據(jù)MVC設(shè)計模式來實現(xiàn)的,里面包含了三層,即模型、視圖和控制器。這個框架的文檔很全面,它的網(wǎng)站上也有很豐富的信息去幫助開發(fā)者上手。
由于PureMVC是純粹用ActionScript實現(xiàn)的,而ActionScript是與JavaScript基于相同標準(ECMAScript)的,強類型的,完全面向?qū)ο蟮恼Z言,因此PureMVC可以很容易移植到其他OO語言。
3)Model-Glue框架
Model-Glue:Flex也是一個簡單的MVCFlex框架。JoeRinehart把他最初創(chuàng)作的Model-GlueforColdFusion移植到了Flex。Model-Glue:Flex受到了好評。它的設(shè)計意圖是成為一個比Cairngorm和PureMVC更輕量的框架,因此更便于快速原型和簡單的Flex應(yīng)用開發(fā)。
4)Foundry框架
ServeBoxFoundry(sbasfoundry)是為Flex2應(yīng)用程序開發(fā)而設(shè)計的ActionScript3/Java框架。它根據(jù)幾個設(shè)計模式而設(shè)計,還包括了一些工具,用來解決Flex2開發(fā)中一再重現(xiàn)的煩人問題:Model-View同步、屏幕瀏覽、訪問控制列表(開發(fā)中)、本地化以及標簽文字外部化等等。
Foundry是為中大型規(guī)模的企業(yè)RIA系統(tǒng)開發(fā)而設(shè)計和實現(xiàn)的。它包含了Java公用模塊,用來將FoundryFlex插件與服務(wù)器端的進程緊密集成。
3 結(jié)束語
Flex作為一項新技術(shù),不僅輕松解決了所有表現(xiàn)層的技術(shù)問題,讓客戶感受前所未有的WEB 應(yīng)用體驗,更主要的是,基與 FLASH AS3.0 的純面向?qū)ο蠛徒M件的構(gòu)架,讓 B/S 結(jié)構(gòu)表現(xiàn)層的開發(fā)層次分明,結(jié)構(gòu)完整協(xié)調(diào).在提供強大華麗表現(xiàn)的同時,大大節(jié)約維護成本。同時,隨著FlexSDK的不斷更新和完善以及Flex輕便的開發(fā)模式和良好的服務(wù)端兼容性,都將對今后Web應(yīng)用的設(shè)計產(chǎn)生本質(zhì)的影響,有利于推動未來Flex的發(fā)展。
參考文獻:
[1] 呂輝.Flex 從入門到實踐[M].劉暉,歐陽,楊建英,譯.北京:清華大學出版社,2009.
[2] 黃曦.Flex 4.0 RIA 開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[3] /go/flex2_gettingstarted.pdf,2006,12.
[4] 郭立.基于Flex的企業(yè)級WEB應(yīng)用開發(fā)的研究與實踐[J].電信交換,2009(4).
[5] 呂曉鵬.精通Flex3.0-基于ActionScript3.0實現(xiàn)[M].北京:人民郵電出版社,2008.