摘要:大型企業(yè)信息化過程中,通過不斷建設(shè)信息系統(tǒng)輔助辦公,以提高生產(chǎn)效率。然而不同的信息系統(tǒng)中,由于設(shè)計、開發(fā)人員不同,帶來了項目風(fēng)險、效率、成本等一系列問題。采用統(tǒng)一的開發(fā)框架和組件,可以節(jié)約成本、提高效率,降低因開發(fā)人員更換、不熟悉框架造成的風(fēng)險。采用統(tǒng)一的開發(fā)框架,可以提高系統(tǒng)安全性,在反復(fù)測試過程中,減少其bug,程序更加健壯。
關(guān)鍵詞關(guān)鍵詞:MVC;J2EE開發(fā)框架;信息系統(tǒng);組件
DOIDOI:10.11907/rjdk.143883
中圖分類號:TP319
文獻(xiàn)標(biāo)識碼:A文章編號文章編號:16727800(2015)002012603
作者簡介作者簡介:韓彩云(1986-),女,山西長治人,碩士,鎮(zhèn)江高等職業(yè)技術(shù)學(xué)校信息工程系助教,研究方向為開發(fā)框架、數(shù)據(jù)挖掘、信息技術(shù)。
0引言
統(tǒng)一的開發(fā)框架將過去使用的公共方法、工具類、組件、模塊等構(gòu)建一個通用的J2EE開發(fā)框架,其主要目的是以后所有信息系統(tǒng)開發(fā)都采用統(tǒng)一的開發(fā)框架,規(guī)范信息化系統(tǒng)開發(fā)工作,降低公司項目開發(fā)風(fēng)險和成本,縮短開發(fā)周期,使開發(fā)人員更多專注于業(yè)務(wù)邏輯實現(xiàn),真正做到代碼重用、框架重用\[1\],針對不同的系統(tǒng)功能定制框架,去掉冗余模塊。同時,不斷升級統(tǒng)一開發(fā)框架,根據(jù)不同的開發(fā)語言、不同的數(shù)據(jù)庫,不斷升級開源框架,盡量做到簡單、易用、安全、穩(wěn)定。
1開發(fā)框架
開發(fā)框架是一個傳統(tǒng)的基于MVC模式的J2EE開發(fā)框架平臺\[2\],采用多層結(jié)構(gòu),分別為展示層、控制層、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,每一層都對應(yīng)一個常用的開源框架作為支撐??刂茖硬捎肧truts為控制器,目前在商業(yè)上應(yīng)用較為廣泛的是Struts1.x,較為穩(wěn)定和安全。數(shù)據(jù)訪問層采用Hibernate作為持久化關(guān)系映射框架。采用Spring IOC管理業(yè)務(wù)邏輯層、數(shù)據(jù)庫訪問層的對象。前端框架中包含了JQuery、圖形框架JFreeChart、潤乾報表等。圖1為開發(fā)框架系統(tǒng)平臺。
開發(fā)框架由基礎(chǔ)組件、技術(shù)組件、業(yè)務(wù)組件構(gòu)成?;A(chǔ)組件主要有系統(tǒng)安全、工具類、統(tǒng)一認(rèn)證、統(tǒng)一權(quán)限、異常管理、日志管理、后臺任務(wù)、系統(tǒng)監(jiān)控、系統(tǒng)參數(shù)加載、系統(tǒng)業(yè)務(wù)代碼管理等。技術(shù)組件主要由列表控件、表單控件、下拉框控件、時間控件等前端組件構(gòu)成,主要用于展示頁面。業(yè)務(wù)組件主要包含附件管理、高級查詢、業(yè)務(wù)組織樹、人員樹、緩存框架定制查詢等?;A(chǔ)組件作為系統(tǒng)最基本層,為系統(tǒng)提供初始化、安全、日志、監(jiān)控、參數(shù)、公共代碼、工具類等支撐,使系統(tǒng)安全、可靠、穩(wěn)定。技術(shù)組件、業(yè)務(wù)組件用于構(gòu)建頁面元素,豐富頁面功能,為界面操作性、友好性提供支撐。圖2為系統(tǒng)結(jié)構(gòu)圖,展示了基礎(chǔ)組件、技術(shù)組件、業(yè)務(wù)組件如何構(gòu)建統(tǒng)一開發(fā)平臺。
圖1開發(fā)框架系統(tǒng)分層圖2統(tǒng)一開發(fā)平臺結(jié)構(gòu)
1.1展示層
展示層主要由JQuery、JFreeChart、潤乾報表等前段展示框架構(gòu)成。JQuery\[3\]為Ajax前端框架,用于構(gòu)建展示頁面和實現(xiàn)前端業(yè)務(wù)邏輯、控制邏輯,具有豐富的方法和組件,其提供了十幾種圖片組件,為開發(fā)框架構(gòu)建了功能豐富的前端框架。JQuery是一個開源前端框架,可以根據(jù)原有的開源代碼進(jìn)行擴(kuò)展,使擴(kuò)展后的方法、組件更加適用于系統(tǒng)業(yè)務(wù)功能的實現(xiàn)。開發(fā)人員可以使用JQuery的樹、表單、列表、菜單、圖片等組件構(gòu)成一個復(fù)雜的功能頁面并展示出來。
JFreeChart和潤乾報表作為統(tǒng)計分析、制作報表的框架和工具,具有豐富的模板。JFreeChart提供區(qū)域圖、柱狀圖、折線圖、餅圖、組合圖等3D和2D圖形,可以滿足各種展示和查看需求。潤乾報表提供報表展示和報表導(dǎo)出功能,直觀的數(shù)據(jù)和豐富的報表樣式,給予用戶豐富的體驗。
1.2控制層
開發(fā)框架的控制層采用Struts1.3\[4\]為邏輯控制層,主要響應(yīng)和處理用戶請求。開發(fā)框架提供了一個控制層基類Action,對于一些基本控制邏輯進(jìn)行統(tǒng)一處理,規(guī)范邏輯層編寫規(guī)則,提高了系統(tǒng)安全性??刂茖踊愔饕峁?quán)限校驗、關(guān)鍵字符過濾,以及調(diào)用統(tǒng)一異常處理組件、監(jiān)控組件、日志組件等,開發(fā)人員在開發(fā)過程中將不用關(guān)心異常、日志、權(quán)限等問題的處理,只專注系統(tǒng)業(yè)務(wù)邏輯的實現(xiàn),降低了開發(fā)人員的要求,減少了重復(fù)代碼編寫,提高了開發(fā)效率。
1.3業(yè)務(wù)邏輯層
開發(fā)框架的業(yè)務(wù)邏輯層十分簡單,為功能的實現(xiàn)提供了一個接口、一個實現(xiàn)類,以及封裝了控制層傳遞給業(yè)務(wù)邏輯層的參數(shù)類。業(yè)務(wù)邏輯層封裝一個抽象的基類,提供一些共通的方法,每個業(yè)務(wù)類都擴(kuò)展到該基類,實現(xiàn)共通的抽象方法。當(dāng)控制層調(diào)用邏輯層時,如果需要傳遞參數(shù),就創(chuàng)建該業(yè)務(wù)類的參數(shù)對象,設(shè)置參數(shù)對象的屬性值,然后再傳遞給業(yè)務(wù)邏輯層。在業(yè)務(wù)邏輯類實現(xiàn)過程中,對需要進(jìn)行數(shù)據(jù)插入、更新、刪除的方法加入Spring\[5\]特有的事務(wù)處理標(biāo)注@Transactional,使用Spring框架進(jìn)行統(tǒng)一的事務(wù)管理,減少事務(wù)控制代碼的重復(fù)開發(fā)。業(yè)務(wù)邏輯層最為關(guān)鍵的地方是對Spring框架的引入,Spring提供了IOC容器和聲明式事務(wù)管理,減少了組件之間的依賴關(guān)系,通過IOC的配置,使組件得到了最大可能的重復(fù)利用。Spring的IOC依賴注入主要是對控制層Action類注入Service接口和對業(yè)務(wù)邏輯層Service類的Dao接口。對數(shù)據(jù)庫訪問的事務(wù)控制主要在Service類調(diào)用Dao的delete、update、insert等涉及數(shù)據(jù)操作方法時使用。
1.4數(shù)據(jù)訪問層
開發(fā)框架的數(shù)據(jù)訪問層采用Hibernate,一個輕量級的持久化開源框架,提供了強(qiáng)大的數(shù)據(jù)庫訪問支撐,為開發(fā)提供了很多方便,程序員不需要關(guān)心底層數(shù)據(jù)庫類型,只要在基類中封裝好通用的數(shù)據(jù)庫訪問方法,極大提高了開發(fā)效率。當(dāng)然對于復(fù)雜的實體關(guān)系和相關(guān)查詢,也需要編寫sql語句,減少HQL的編寫。同時Hibernate提供性能優(yōu)化策略:緩存、延遲加載、關(guān)聯(lián)優(yōu)化等,以提高查詢效率。
2基礎(chǔ)組件
基礎(chǔ)組件主要有系統(tǒng)安全、工具類、統(tǒng)一認(rèn)證、統(tǒng)一權(quán)限、異常管理、日志管理、后臺任務(wù)管理、系統(tǒng)監(jiān)控、系統(tǒng)參數(shù)、系統(tǒng)公共代碼管理等。系統(tǒng)安全組件主要處理用戶驗證、權(quán)限驗證、關(guān)鍵字符過濾、url連接過濾(黑名單、白名單)、跨站攻擊過濾等。本模塊主要采用Filter方式對用戶請求進(jìn)行過濾,依次進(jìn)行用戶登陸校驗、資源訪問權(quán)限校驗、關(guān)鍵字符過濾、參數(shù)轉(zhuǎn)碼等,確保正確的用戶訪問,防止越界訪問。
工具類是每個業(yè)務(wù)系統(tǒng)都會用到的,而且各個業(yè)務(wù)系統(tǒng)都要定制各自的工具類,適用于不同的場景,具有一定的共通性。統(tǒng)一開發(fā)平臺構(gòu)建統(tǒng)一、共通的工具類,提供不同參數(shù),如參數(shù)、返回值、方法名稱等,滿足各種應(yīng)用場景,使之在不同業(yè)務(wù)系統(tǒng)之間能很好地兼容和復(fù)用,提高開發(fā)效率。工具類主要有數(shù)值、日期、數(shù)據(jù)庫、文件、FTP、WebService、報表、導(dǎo)出、權(quán)限等工具類。
認(rèn)證:每個業(yè)務(wù)系統(tǒng)都有一個登陸管理模塊,開發(fā)框架提取出統(tǒng)一的認(rèn)證組件,在每個業(yè)務(wù)系統(tǒng)中都采用該組件進(jìn)行用戶登陸管理,不管是單點(diǎn)登陸,還是統(tǒng)一認(rèn)證都可以使用該組件。其兼容性強(qiáng),不同的前端框架都提供強(qiáng)大支持。
每個系統(tǒng)需要訪問統(tǒng)一權(quán)限平臺,獲取業(yè)務(wù)系統(tǒng)角色和角色權(quán)限,減少開發(fā)人員為權(quán)限而花費(fèi)時間,縮短開發(fā)周期。
異常管理為業(yè)務(wù)系統(tǒng)提供統(tǒng)一的管理,是非常重要的模塊,可保證系統(tǒng)穩(wěn)定性、健壯性。異常分為Error和Exception,其中Exception又分為RuntimeException、非RuntimeException。Error為系統(tǒng)運(yùn)行過程中的內(nèi)部錯誤,以及資源耗盡的情形。RuntimeException為指針越界訪問、類型轉(zhuǎn)換、空指針等,這個是程序員編寫代碼造成的錯誤。非RuntimeException一般為外部錯誤,如IOException。異常管理處理辦法將所有異常在控制層進(jìn)行處理,Service層、Dao層不對異常進(jìn)行處理,直接拋出異常。根據(jù)拋出異常對象類型,在控制層進(jìn)行分類保存到數(shù)據(jù)庫,然后系統(tǒng)維護(hù)人員、開發(fā)人員根據(jù)異常管理界面查看異常信息。如果異常是Error和非RuntimeException,如IOException、內(nèi)存不夠、數(shù)據(jù)庫連接等異常,維護(hù)人員要查看文件系統(tǒng)是否有文件,要關(guān)閉系統(tǒng)運(yùn)行的無效程序,減少內(nèi)存損耗,查看數(shù)據(jù)庫實例是否運(yùn)行正常。如果異常為NullPointerException、類型轉(zhuǎn)換錯誤、引用錯誤等異常,則需要開發(fā)人員修改相應(yīng)代碼。
2.1任務(wù)管理
主要提供后臺任務(wù)管理。后臺任務(wù)實現(xiàn)采用Quartz框架,只需實現(xiàn)org.quartz.Job接口,在Execute方法中編寫執(zhí)行邏輯。在MVC的J2EE項目中,可以通過在Spring配置文件中設(shè)置job的執(zhí)行周期,配置任務(wù)執(zhí)行方法。如果不通過Spring配置job,也可以直接在代碼中執(zhí)行周期,在服務(wù)器啟動時同時啟動quartz調(diào)度器。但是這種方式不靈活,因為在服務(wù)器上發(fā)布應(yīng)用后就不能修改任務(wù)調(diào)度參數(shù)了。
開發(fā)框架提供了一個后臺任務(wù)管理模塊,在后臺任務(wù)管理頁面上靈活配置后臺任務(wù)調(diào)度信息,如Cron表達(dá)式、后臺任務(wù)執(zhí)行類、執(zhí)行方法、優(yōu)先級等,然后通過啟動按鈕控制來啟動后臺任務(wù),通過停止按鈕控制正在運(yùn)行、等待執(zhí)行的后臺任務(wù)。通過該模塊,可以實時新增任務(wù),修改任務(wù)執(zhí)行參數(shù),停止后臺任務(wù),不需要每次都去修改配置文件,使后臺任務(wù)更加靈活可控。
2.2公共代碼管理
傳統(tǒng)MIS系統(tǒng)會為業(yè)務(wù)對象的每個維度都維護(hù)一張表或者存放靜態(tài)變量,如果這樣,將大量增加開發(fā)工作量和系統(tǒng)復(fù)雜度,而且維護(hù)成本也會增加。公共代碼管理模塊將這些業(yè)務(wù)對象的維度抽取,統(tǒng)一維護(hù),建立共通的代碼,提供需要的業(yè)務(wù)功能模塊,以降低工作量和難度。
公共代碼模塊主要維護(hù)代碼和維度值的對應(yīng)關(guān)系,然后提供一個共通的方法獲取維度。在前端展示維度時,顯示公共代碼值,不用關(guān)心維度值的代碼。當(dāng)存放業(yè)務(wù)對象維度時,將公共代碼存放到維度字段中。系統(tǒng)的業(yè)務(wù)功能有層級關(guān)系,維度展示樣式有列表和樹,所以公共代碼模塊的表需要設(shè)計為樹結(jié)構(gòu),便于展示和實現(xiàn),同時提供前端維護(hù)界面,方便開發(fā)人員使用。通過新增、編輯、刪除維護(hù)公共代碼,通過導(dǎo)入、導(dǎo)出,升級維護(hù)系統(tǒng)公共代碼。
2.3系統(tǒng)參數(shù)
系統(tǒng)參數(shù)加載作為系統(tǒng)啟動時初始化參數(shù),如登陸方式、白名單、黑名單、FTP配置、加密方式等系統(tǒng)相關(guān)參數(shù),存放在數(shù)據(jù)庫系統(tǒng)參數(shù)表中,每次啟動系統(tǒng)時,自動加載表中的系統(tǒng)參數(shù)數(shù)據(jù),不用每次去修改系統(tǒng)參數(shù)類。同時,提供系統(tǒng)參數(shù)配置界面,通過界面維護(hù)系統(tǒng)參數(shù)數(shù)據(jù),重新加載參數(shù)。設(shè)置系統(tǒng)全局靜態(tài)變量,不用重新在服務(wù)器上發(fā)布系統(tǒng),提高了系統(tǒng)靈活性。
2.4日志管理
系統(tǒng)運(yùn)行日志一般都存放在一個文件中,運(yùn)維人員每天定時去服務(wù)器上調(diào)取日志文件,上傳到FTP,然后程序員花費(fèi)大量時間從日志文件中查找異常,分析問題,整個過程繁瑣、復(fù)雜,效率極低。日志管理模塊省去這些步驟,將日志分類存放到數(shù)據(jù)庫中,程序員可以直接在日志管理界面中查找、過濾error類型日志,提取日志信息,分析并解決問題。
開發(fā)框架日志管理模塊采用log4j記錄日志。該模塊將日志分門別類保存到數(shù)據(jù)庫表中,為系統(tǒng)開發(fā)人員提供日志管理界面。開發(fā)人員通過日志界面查看錯誤日志信息。log4j日志級別從低到高分別為debug、info、warn、error、fatal,一般log4j配置error級別,系統(tǒng)后臺代碼異常、錯誤通過日志管理模塊記錄到數(shù)據(jù)庫。對于前段代碼,需要特殊處理,初始化前端時,需要為Windows對象綁定error事件處理方法,該方法將前段錯誤日志記錄并調(diào)用后臺代碼保存到數(shù)據(jù)庫中。
3技術(shù)組件
技術(shù)組件主要封裝前端頁面元素,使頁面的元素組件化、對象化,可以直接使用對象創(chuàng)建一個實例,直接使用,減少頁面構(gòu)建時間。如參數(shù)封裝、日期時間組件、通用彈出框、下拉復(fù)選框、下拉復(fù)選樹、界面通用初始化方法、常量、搜索組件、下拉圖選擇組件等采用共通方法。表1為JQuery常用組件,每個類型都包含了多種展現(xiàn)組件\[5\]。
表1JQuery組件清單
類型[]常見組件
表單[]日期時間控件、批量輸入框、帶圖片下拉框、下拉復(fù)選框、顏色選擇控件、微調(diào)控件、表格下拉列表、星級評分控件等
菜單[]抽屜式菜單、下拉菜單、水平下拉菜單、上下文菜單、垂直菜單、導(dǎo)航菜單、多層級樹形菜單、可折疊菜單等
表格[]帶過濾條件的表格、表格動態(tài)分頁、分組表頭、列表樹、表格列鎖定表、格本地分頁、表格比率條、緩沖式表格等。
樹[]Treeview、jstree、filetree、zTree等
Tab頁[]可滾動的tab控件、MagicTabs、idTabs、UI Tabs Paging等
地圖控件[]jHERE、JMaps、谷歌地圖控件GMAP3、矢量地圖控件JQVAMP、GPS、百度地圖標(biāo)注控件等
分頁[]Pagingnation
Tip提示[]PoshyTip、Opentip、DToolTip、氣泡提示控件、消息通知控件等。
驗證[]Validation
圖片組件[]Imgareaselect、easy slide、easynew、jqzoom、thickbox、prettyphoto、slider gallery等
4業(yè)務(wù)組件
業(yè)務(wù)組件為一個需要和后臺交互的、共通的前端組件,如業(yè)務(wù)組織樹、單位樹、基準(zhǔn)組織樹、附件管理、界面初始化共通、高級查詢等。從不同項目的業(yè)務(wù)功能中提取一些共通的功能,進(jìn)行封裝、組件化,方便程序員使用。不需要實現(xiàn)后臺邏輯和前端復(fù)雜代碼,直接在前端創(chuàng)建對象,給對象傳遞相關(guān)參數(shù),實現(xiàn)想要的功能。為了使用某些業(yè)務(wù)組件,如附件管理、高級查詢,需要數(shù)據(jù)庫表支撐,對于不同的數(shù)據(jù)庫,也需要提供不同的建表腳本。
5結(jié)語
統(tǒng)一的開發(fā)框架平臺采用經(jīng)典MVC分層設(shè)計,集成Struts、Spring、Hibernate、JQuery等開源框架,每層分工明確,提供了公共組件、工具類、功能模塊,構(gòu)建了一個基礎(chǔ)的、通用的開發(fā)框架,解決了信息系統(tǒng)開發(fā)框架搭建問題,提高了效率、降低了成本,同時提高了信息系統(tǒng)的可靠性、安全性、可控性。
參考文獻(xiàn)參考文獻(xiàn):
\[1\]周曉鋒,劉馨月,張靖波.基于可重用組件技術(shù)的軟件開發(fā)方法\[J\].信息技術(shù),2005(11):139142.
\[2\]陶國榮.jQuery權(quán)威指南\[M\].北京:機(jī)械工業(yè)出版社,2011.
\[3\]TED N HUSTED, CEDRIC DUMOULIN, GEORGE FRANCISCUS, et al. Struts in action\[M\].New York: Manning Publications Co,2002:125150.
\[4\]CRAIG WALLS.Spring in action\[M\].3rd Edition耿淵,張衛(wèi)濱,譯.北京:人民郵電出版社, 2013:100125.
\[5\]MARTIN FOWLER.企業(yè)級應(yīng)用架構(gòu)中模式的應(yīng)用\[M\].王懷民,周斌,譯.北京:機(jī)械工業(yè)出版社, 2003:225245.
責(zé)任編輯(責(zé)任編輯:杜能鋼)