文/李朕 阮華
基于MVC模式的科研團(tuán)隊空間協(xié)同系統(tǒng)開發(fā)
文/李朕 阮華
本文針對科研團(tuán)隊個性化系統(tǒng)的需求,設(shè)計和開發(fā)了一個采用MVC模式基于ExtJS+Spring+Hibernate框架的科研團(tuán)隊空間協(xié)同系統(tǒng)。論文詳細(xì)闡述了系統(tǒng)的設(shè)計方案和技術(shù)框架,并以系統(tǒng)中公告管理模塊為例具體描述了系統(tǒng)MVC模式的開發(fā)實現(xiàn)過程,其中,Spring負(fù)責(zé)業(yè)務(wù)邏輯,Hibernate構(gòu)建數(shù)據(jù)持久層,ExtJS實現(xiàn)前臺頁面顯示。結(jié)果表明,該科研團(tuán)隊空間系統(tǒng)開發(fā)框架層次分明,實現(xiàn)了頁面顯示與業(yè)務(wù)邏輯的高效分離,開發(fā)效率提高近20%,具有較高的靈活性、可移植性和擴(kuò)展性,應(yīng)用效果良好。
ExtJS Spring Hibernate 科研團(tuán)隊空間 MVC 開發(fā)研究
科研單位每年會承擔(dān)大量的科研項目和課題,這些項目以及它們之后的持續(xù)性研究鎖積累的科研文檔資料對科研人員的后續(xù)研究具有十分重要的價值。如何將它們進(jìn)行高效管理,在研究團(tuán)隊內(nèi)部實現(xiàn)交流和共享,很大程度上會影響項目組的工作效率?!翱蒲袌F(tuán)隊空間系統(tǒng)系統(tǒng)”就是在這樣的背景下提出的。在團(tuán)隊空間系統(tǒng)中,科研人員將建立起以項目為基礎(chǔ)的研究團(tuán)隊,并在團(tuán)隊與團(tuán)隊之間、團(tuán)隊與科研人員之間實現(xiàn)信息與資源的管理、共享。
另一方面,Java EE框架在保留技術(shù)安全性、擴(kuò)展性、平臺無關(guān)性和可維護(hù)性優(yōu)勢的同時,彌補(bǔ)了傳統(tǒng)開發(fā)平臺顯示、業(yè)務(wù)和數(shù)據(jù)的高耦合等問題,成為當(dāng)前Web系統(tǒng)的主要解決方案之一。本文采用當(dāng)前較為流行的Spring + Hibernate開源框架組合,再結(jié)合ExtJS作為與用戶交互的前端,搭建一個高效的富Web應(yīng)用軟件開發(fā)框架—基于Ext+ Spring + Hibernate的科研團(tuán)隊空間系統(tǒng)開發(fā)平臺,完成系統(tǒng)的設(shè)計和開發(fā)工作。
依據(jù)科研團(tuán)隊工作的實際需要和系統(tǒng)的特點,科研團(tuán)隊空間可分為三大部分:團(tuán)隊空間業(yè)務(wù)、控制面板和系統(tǒng)管理。團(tuán)隊空間業(yè)務(wù)模塊是系統(tǒng)的核心模塊,主要包括團(tuán)隊導(dǎo)航、我的團(tuán)隊、創(chuàng)建團(tuán)隊、文檔中心、協(xié)同寫作、科研日志、團(tuán)隊資料、團(tuán)隊設(shè)定、公告通知等子模塊;控制面板模塊負(fù)責(zé)對個系統(tǒng)中的每個科研人員個人信息進(jìn)行設(shè)置,包括個人信息、密碼修改和站內(nèi)短信中心等;系統(tǒng)管理模塊負(fù)責(zé)對整個團(tuán)隊空間進(jìn)行系統(tǒng)管理,包括團(tuán)隊分類管理、團(tuán)隊管理、日志管理、通知管理、文檔資料管理、系統(tǒng)備份和系統(tǒng)還原功能。
圖1:科研團(tuán)隊空間系統(tǒng)功能模塊
本文的系統(tǒng)在技術(shù)架構(gòu)上采用ExtJS+Spring+Hibernate組成的開源框架,以MVC(Model-View-Control) 為 開 發(fā) 模式,結(jié)構(gòu)上按業(yè)務(wù)功能分為表示層、業(yè)務(wù)層和數(shù)據(jù)持久層。開發(fā)環(huán)境選用功能完整的MyEclipse7.5;底層數(shù)據(jù)庫為MySQL。
系統(tǒng)采用Spring 提供的MVC功能進(jìn)行系統(tǒng)開發(fā)。MVC分別代表模型(Model),視圖(View)和控制Controller),在MVC架構(gòu)中,Model(模型)代表了應(yīng)用程序的核心功能,它負(fù)責(zé)處理用戶的數(shù)據(jù),實現(xiàn)業(yè)務(wù)邏輯可用Spring這樣的構(gòu)件對象來處理業(yè)務(wù);View(視圖)是用戶看到并與之交互的界面,它向用戶顯示相關(guān)的數(shù)據(jù),并能接收用戶的輸入數(shù)據(jù),但是它并不進(jìn)行任何實際的業(yè)務(wù)邏輯;Controller(控制器)負(fù)責(zé)接收用戶的請求和數(shù)據(jù),接著它會做出判斷將請求和數(shù)據(jù)交由哪一個模型來處理,最后調(diào)用視圖來顯示模型返回的數(shù)據(jù)。
4.1.1 搭建環(huán)境和數(shù)據(jù)庫建立
在集成開發(fā)環(huán)境MyEclipse7.5搭建上述MVC框架(導(dǎo)入ExtJS、Spring、Hibernate包),應(yīng)用前面構(gòu)架的Spring MVC平臺進(jìn)行開發(fā)和系統(tǒng)實現(xiàn)。首先結(jié)合系統(tǒng)業(yè)務(wù)功能需求,在MySQL數(shù)據(jù)庫中建立數(shù)據(jù)表。建表后,分別用Hibernate實現(xiàn)數(shù)據(jù)持久層(數(shù)據(jù)對象),用ExtJS實現(xiàn)表現(xiàn)層(前臺界面),用Spring整合表現(xiàn)層、數(shù)據(jù)持久層和業(yè)務(wù)層,從而達(dá)到各個功能模塊的目標(biāo)。
4.1.2 數(shù)據(jù)持久層
首先需要完成數(shù)據(jù)持久層的實現(xiàn):使用Hibernate實現(xiàn)對象關(guān)系的映射,建立數(shù)據(jù)庫中與表的字段相對應(yīng)的類,如公告管理模塊在數(shù)據(jù)庫中對應(yīng)的表為公告管理表(sys_public_ post),因此建立SysPublicPost.java類,并建立表sys_public_post的映射文件SysPublicPost. hbm.xml,實現(xiàn)Hibernate的數(shù)據(jù)對象映射,從而可以在后面的業(yè)務(wù)邏輯工作中,直接操作映射出來的數(shù)據(jù)對象類,進(jìn)行數(shù)據(jù)讀取、新增、刪除和編輯。
4.1.3 MVC模式開發(fā)—頁面和業(yè)務(wù)邏輯
View--視圖層:
在Spring MVC中,使用JSP作為網(wǎng)頁顯示文件,JSP文件中幾乎沒有Java代碼,只有HTML/ExtJS代碼,也就是說,JSP文件只作為視圖(View)模板使用。其中,使用ExtJS來設(shè)計可實現(xiàn)重復(fù)使用的網(wǎng)頁組件,并運用Spring進(jìn)行頁面邏輯呈現(xiàn)。
Controller--控制層:
Spring內(nèi)建了一個MVC框架,以Servlet分發(fā)器為中心,將Web請求分發(fā)到各個不同的處理器進(jìn)行處理。該Servlet就是Spring提供的DispatcherServlet,它必須在Web.xml里配置,同時可以配置多個DispatcherServlet,且每個DispatcherServlet都會加載和應(yīng)用相關(guān)的xml文件??蒲袌F(tuán)隊空間系統(tǒng)的Web.xml核心代碼對servlet和servlet-mapping做了配置。
Model—業(yè)務(wù)模型層:
首先,依據(jù)業(yè)務(wù)功能需求定義業(yè)務(wù)邏輯類的接口方法ISysService,每個接口方法處理一項具體的業(yè)務(wù)需求,如添加、刪除等;其次,依據(jù)特定的業(yè)務(wù)處理過程編寫SysServiceImp實現(xiàn)類來實現(xiàn)ISysService中的接口方法。在接口實現(xiàn)過程中,若需要與數(shù)據(jù)層進(jìn)行交互,則調(diào)用數(shù)據(jù)訪問類DAO中的數(shù)據(jù)訪問方法完成。若現(xiàn)有方法不能滿足應(yīng)用需求,則可依據(jù)實際情況編寫新類繼承DAO類,并在新類中添加所需的方法。每個SysServiceImp類都要實現(xiàn)setSysDao方法,用于將管理和調(diào)用數(shù)據(jù)訪問類DAO的工作交由Spring框架來完成;最后,在ApplicationContext.xml中進(jìn)行配置:為SysServiceImp類配置<bean>對象和注入數(shù)據(jù)訪問對象。
可以看到,MVC架構(gòu)的開發(fā)模式,使得系統(tǒng)將Java Bean抽象為模型層,JSP/ExtJS獨立成為視圖層。當(dāng)用戶登陸后對公告進(jìn)行顯示、新增、編輯、刪除等操作時,JSP/ExtJS頁面將控制權(quán)交給Servlet,Servlet將封裝的HttpServletRequest、HttpServletResponse作 為參數(shù)傳給Bean處理;Bean將處理結(jié)果放入HttpServlet-Response;Servlet再次獲得控制權(quán),將處理的結(jié)果交給ExtJS預(yù)處理器,最后完成組件的頁面顯示,該過程如圖3所示。這樣,系統(tǒng)的前端技術(shù)與后端技術(shù)不僅完全分離,客戶端載荷也得到了簡化。
基于ExtJS、Spring和Hibernate的科研團(tuán)隊空間系統(tǒng)完整實現(xiàn)了1.1節(jié)所設(shè)計的模塊功能,并順利部署運行,具體實現(xiàn)效果如圖2。
圖2:系統(tǒng)應(yīng)用整體效果圖
ExtJS前臺框架與Spring、Hibernate技術(shù)的結(jié)合,在系統(tǒng)的開發(fā)和實際運行測試中,與同類型Java EE系統(tǒng)或Web系統(tǒng)比較,具有以下幾個方面的性能優(yōu)勢:
4.3.1 頁面顯示與業(yè)務(wù)邏輯層分離
在Spring的MVC框架中,ExtJS有效地促進(jìn)了從業(yè)務(wù)邏輯中分離出頁面表現(xiàn)。開發(fā)人員可以將精力集中于模型層、控制層、數(shù)據(jù)層的設(shè)計以及進(jìn)行復(fù)雜的數(shù)據(jù)封裝和業(yè)務(wù)邏輯處理。在本系統(tǒng)的開發(fā)中,即做到了上述前臺頁面與后臺業(yè)務(wù)邏輯的有效分離,同時,項目中開發(fā)的業(yè)務(wù)邏輯和實現(xiàn)類也可以為今后系統(tǒng)開發(fā)所用。因此,與同類的其它Web系統(tǒng)相比,本系統(tǒng)具有明顯的可移植性和復(fù)用性優(yōu)勢。
4.3.2 豐富的客戶端組件
本系統(tǒng)使用ExtJS前臺頁面顯示,它免去了繁瑣的CSS設(shè)置,換句話說,ExtJS可以通過簡單的JavaScrip代碼實現(xiàn)富客戶端的用戶體驗,也避免了傳統(tǒng)JSP/Html頁面美工制作難且出力不討好的矛盾。
4.3.3 模塊化實現(xiàn),縮短數(shù)據(jù)讀寫和操作等待時間
通過流行框架Spring、Hibernate和新興ExtJS框架技術(shù)的結(jié)合,系統(tǒng)構(gòu)建一個具有強(qiáng)適應(yīng)的體系架構(gòu)和全新快速用戶體驗的新一代網(wǎng)絡(luò)應(yīng)用。在實際應(yīng)用測試中,由于采用了ExtJS+Sping+Hibernate的組合,系統(tǒng)的數(shù)據(jù)讀取、寫入和響應(yīng)時間比其它同類型的Web系統(tǒng)短18%,獲得了明顯的數(shù)據(jù)交互效率提升。
本文將基于ExtJS + Spring +Hibernate的MVC開發(fā)架構(gòu)應(yīng)用在科研團(tuán)隊空間系統(tǒng)開發(fā)中,由Hibernate構(gòu)建數(shù)據(jù)持久層,Spring負(fù)責(zé)業(yè)務(wù)邏輯,ExtJS實現(xiàn)前臺頁面顯示的模式有效地將頁面和業(yè)務(wù)邏輯分離,達(dá)到提高開發(fā)效率,簡化開發(fā)復(fù)雜度,實現(xiàn)富客戶端全新體驗的。開發(fā)結(jié)果表明,該系統(tǒng)開發(fā)層次分明,在與同類型的系統(tǒng)比較測試中,開發(fā)效率和運行速度提高近20%,具有良好的復(fù)用性、靈活性、擴(kuò)展性和可維護(hù)性。
[1]孫衛(wèi)琴.Java面向?qū)ο缶幊蘙M].北京:電子工業(yè)出版社,2006.
[2]孫衛(wèi)琴.Tomcat與Java Web開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2009.
[3]林信良.Spring 2.0技術(shù)手冊(第2版) (第二版)[M].北京:電子工業(yè)出版社,2010.
[4]Craig Walls, Ryan Breideabach. Spring In Action (李磊,程立,周悅虹譯)[M].北京:人民郵電出版社,2006:253-269.
[5]高瞻,鎖志海.基于Struts+Spring+ Hibernate框架的網(wǎng)絡(luò)評比系統(tǒng)[J].微計算機(jī)信息,2010(26):179-181.
[6]惠 剛 ,付 超 .使 用 JSF、Spring、Hibernate開發(fā)web應(yīng)用[J].微計算機(jī)信息,2008(24):188-190.
[7]徐會生等.深入淺出Ext JS[M].北京:人民郵電出版社,2010(05).
[8]涂翔云,姚欣,李春陽譯.J2EE權(quán)威指南[M].北京:電力出版社,2003:68-72.
[9]劉曉華.J2EE應(yīng)用開發(fā)詳解[M].北京:電子工業(yè)出版社,2004:156-167.
[10]梁立新.項目實踐精解:基于Struts-Spring-Hibernate的Java應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2006:272-304.
[11]孫衛(wèi)琴.精通Struts基于MVC的Java Web設(shè)計與開發(fā)[M].北京:電子工業(yè)出版社,2004:189-203.
[12]楊振東.基于AOP和IoC的Ajax Web框架的應(yīng)用研究[D].重慶大學(xué),2008(10).
作者單位中國工程物理研究院科技信息中心 四川省綿陽市 621900
李朕(1983-),男,四川省綿陽市人。碩士學(xué)位。工程師。2009年碩士畢業(yè),現(xiàn)在中國工程物理研究院從事信息技術(shù)研究,在國內(nèi)外刊物上發(fā)表論文2篇,SCI、EI收錄各一篇。