摘要: 針對(duì)目前J2EE應(yīng)用系統(tǒng)項(xiàng)目開(kāi)發(fā)存在交付滯后、維護(hù)性差等問(wèn)題,提出了一種新的軟件自動(dòng)生成方法。設(shè)計(jì)了代碼自動(dòng)生成引擎的總體框架,給出了各個(gè)組成部分的詳細(xì)設(shè)計(jì)方案,對(duì)關(guān)鍵組件進(jìn)行了具體實(shí)現(xiàn)。該引擎為提高軟件開(kāi)發(fā)效率和降低軟件開(kāi)發(fā)成本提供了一種行之有效的途徑和方法,在一定程度上降低了軟件開(kāi)發(fā)的風(fēng)險(xiǎn)。在實(shí)際項(xiàng)目開(kāi)發(fā)中驗(yàn)證了該系統(tǒng)的可行性。
關(guān)鍵詞: J2EE框架; 代碼自動(dòng)生成; 軟件架構(gòu); 開(kāi)發(fā)風(fēng)險(xiǎn)
中圖分類(lèi)號(hào):TP311文獻(xiàn)標(biāo)志碼:A 文章編號(hào):1006-8228(2012)11-42-02
Design and implementation of an engine generating codesautomatically based on J2EE architecture
Xu Aichun
(Huzhou Vocational & Technical College, Huzhou, Zhejiang 313000, China)
Abstract: An automatic generation method of codes based on J2EE is given in order to solve those problems such as delayed application delivery and poor maintenance. In this paper, a key detailed schema and method are introduced to realize code generating system after designing a system framework. An effective method is proposed to improve software development efficiency and reduce development costs. It reduces the risk in software development. Feasibility is verified in application process.
Key words: J2EE architecture; code generation; software architecture; development risk
0 引言
隨著企事業(yè)單位信息化系統(tǒng)的迅速普及,基于J2EE架構(gòu)的技術(shù)已經(jīng)在各個(gè)系統(tǒng)開(kāi)發(fā)中得到了廣泛的應(yīng)用。目前,在J2EE體系架構(gòu)中,各種開(kāi)源框架的J2EE架構(gòu)已經(jīng)比較成熟和穩(wěn)定,并逐漸成為軟件項(xiàng)目開(kāi)發(fā)的首選和主流,優(yōu)秀的開(kāi)源框架在J2EE中的應(yīng)用在一定程度上也促進(jìn)了企業(yè)級(jí)應(yīng)用的發(fā)展[1,2]。
基于J2EE輕型框架的開(kāi)發(fā)給項(xiàng)目開(kāi)發(fā)帶來(lái)了革命性的突破。利用J2EE輕型框架[3,4],可以針對(duì)項(xiàng)目進(jìn)行研發(fā)分層,實(shí)現(xiàn)項(xiàng)目的快速開(kāi)發(fā)。但從現(xiàn)狀來(lái)看,還面臨著一些新的問(wèn)題。
⑴ 項(xiàng)目過(guò)于集中,開(kāi)發(fā)產(chǎn)能?chē)?yán)重不足
由于大環(huán)境以及實(shí)際情況的影響,造成了項(xiàng)目開(kāi)發(fā)往往集中在一個(gè)時(shí)間段內(nèi),而人力產(chǎn)能是單位時(shí)間內(nèi)有限的關(guān)鍵資源,這會(huì)造成資源上的沖突,這種沖突會(huì)影響到公司承接項(xiàng)目的并行開(kāi)發(fā)能力。
⑵ 項(xiàng)目工期緊,需求變更頻繁,質(zhì)量要求高
信息系統(tǒng)建設(shè)單位往往對(duì)時(shí)間要求很?chē)?yán)格,質(zhì)量要求高,在時(shí)間非常緊張的情況下,變更需求以至重新設(shè)計(jì)并且編碼,無(wú)疑是對(duì)研發(fā)人員的嚴(yán)峻的考驗(yàn),研發(fā)壓力大,項(xiàng)目工期緊,項(xiàng)目質(zhì)量有可能下降。
⑶ 系統(tǒng)可維護(hù)性差
由于開(kāi)發(fā)人員風(fēng)格有所不同,水平參差不齊,他們編寫(xiě)的代碼千差萬(wàn)別,造成了程序風(fēng)格不統(tǒng)一,修改、維護(hù)也很不方便,這最終造成項(xiàng)目維護(hù)的效率下降。
對(duì)于上述這些問(wèn)題,我們迫切需要一種新的研發(fā)模式替代以前的研發(fā)模式。針對(duì)J2EE平臺(tái)上開(kāi)發(fā)的應(yīng)用軟件,需要一個(gè)基于關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用軟件的J2EE平臺(tái)的代碼自動(dòng)生成引擎,實(shí)現(xiàn)基于關(guān)系數(shù)據(jù)庫(kù)的業(yè)務(wù)系統(tǒng)的設(shè)計(jì)成果到實(shí)現(xiàn)代碼的快速轉(zhuǎn)化,并且可以實(shí)現(xiàn)由非J2EE的基于關(guān)系數(shù)據(jù)庫(kù)的應(yīng)用到先進(jìn)的J2EE的平臺(tái)的快速轉(zhuǎn)化??s短設(shè)計(jì)到代碼實(shí)現(xiàn)的轉(zhuǎn)化時(shí)間,節(jié)約人力資源的成本。最大限度地提高代碼重用性、易維護(hù)性以及減輕開(kāi)發(fā)人員負(fù)擔(dān)。幫助開(kāi)發(fā)人員從煩瑣的編碼的技術(shù)細(xì)節(jié)中解脫出來(lái),把更多的時(shí)間和精力投入到業(yè)務(wù)問(wèn)題的分析和研究上,提高軟件的質(zhì)量。
本文在研究各個(gè)開(kāi)源框架的基礎(chǔ)上,集成J2EE各層核心技術(shù),開(kāi)發(fā)了一套面向J2EE輕型框架應(yīng)用的代碼自動(dòng)生成引擎[5],并在實(shí)際開(kāi)發(fā)中得到了驗(yàn)證,取得了良好的應(yīng)用效果。
1 系統(tǒng)總體框架
根據(jù)上述業(yè)務(wù)需求,結(jié)合J2EE應(yīng)用系統(tǒng)各個(gè)層級(jí)之間的關(guān)系,本引擎的總體框架設(shè)計(jì)如圖1所示。
圖1總體框架
首先根據(jù)用戶的業(yè)務(wù)需求進(jìn)行建模,然后在此基礎(chǔ)上進(jìn)行數(shù)據(jù)庫(kù)建模,本引擎根據(jù)數(shù)據(jù)庫(kù)各個(gè)表的字段及拓?fù)潢P(guān)系,以及相應(yīng)的業(yè)務(wù)控制文件,調(diào)用模板自動(dòng)生成系統(tǒng)業(yè)務(wù)邏輯層、表示層、數(shù)據(jù)訪問(wèn)層,以及各個(gè)層之間的關(guān)系配置。
2 系統(tǒng)實(shí)現(xiàn)
2.1 數(shù)據(jù)訪問(wèn)層(DAO)代碼生成
數(shù)據(jù)訪問(wèn)層主要實(shí)現(xiàn)與底層數(shù)據(jù)庫(kù)交互,封裝了數(shù)據(jù)的增、刪、改、查等功能,代碼自動(dòng)生成引擎根據(jù)數(shù)據(jù)表的名稱(chēng)和字段,以及表之間的關(guān)系,在業(yè)務(wù)配置文件的指導(dǎo)下,調(diào)用數(shù)據(jù)訪問(wèn)層的模板,生成數(shù)據(jù)訪問(wèn)層代碼,代碼包括DAO接口及其實(shí)現(xiàn),表的domain對(duì)象,若封裝了iBatis O/R組件,則還自動(dòng)生成SqlMap XML文件。數(shù)據(jù)訪問(wèn)層的接口代碼模板如下:
……
public interface
public PageInfo< className/>List( classNameLower/>,int pageNum, int pageSize); public ById(final public Long saveTo className/> …… 上述模板中,XDtClass:className為XDoclet標(biāo)簽,獲取表名稱(chēng)并根據(jù)規(guī)則轉(zhuǎn)換成類(lèi)名的一部分, 數(shù)據(jù)訪問(wèn)層模板可以根據(jù)不同的持續(xù)化組件生成相應(yīng)實(shí)現(xiàn)代碼,如hibernate、iBatis,數(shù)據(jù)訪問(wèn)層的接口iBatis實(shí)現(xiàn)代碼模板如下: …… public class implements public void save className/> = getType="getterName"/>(); if ( =( getSqlMapClientTemplate().insert("add className/>", } else { getSqlMapClientTemplate().update("update className/>", } if( throw new ObjectRetrievalFailureException( className/>.class, ="propertyName"/>); } } …… 上述模板代碼以iBatis持續(xù)化組件為基礎(chǔ),生成DAO層的接口、接口實(shí)現(xiàn)以及SqlMap,也可以按照業(yè)務(wù)需求,將相應(yīng)的模板替換成基于hibernate等持續(xù)化層的實(shí)現(xiàn)。 2.2 業(yè)務(wù)邏輯層(Service)代碼生成 業(yè)務(wù)邏輯層是整個(gè)應(yīng)用系統(tǒng)的核心,引擎根據(jù)不同業(yè)務(wù)需求定制不同的業(yè)務(wù)模板,業(yè)務(wù)邏輯層根據(jù)所接收到的Controller層不同命令進(jìn)行業(yè)務(wù)處理,然后確定應(yīng)該調(diào)度哪些數(shù)據(jù)訪問(wèn)層接口。以下代碼為通用的業(yè)務(wù)邏輯層模板具體實(shí)現(xiàn)代碼: …… public class BaseService implements @Autowired private public GridPage< className/>InfoList(final String getType="propertyName"/>) { return dao.get ( } …… 業(yè)務(wù)邏輯層模板中,針對(duì)復(fù)雜的業(yè)務(wù)邏輯,應(yīng)該在代碼生成之后,根據(jù)需要進(jìn)行定制,模板只能生成業(yè)務(wù)邏輯而不是復(fù)雜的代碼。 2.3 表現(xiàn)層代碼生成 表現(xiàn)層實(shí)現(xiàn)應(yīng)用系統(tǒng)與用戶交互,表現(xiàn)層將用戶各種請(qǐng)求提交給控制層,控件層根據(jù)不同需求去請(qǐng)求業(yè)務(wù)邏輯層,并把處理結(jié)果反饋給表現(xiàn)層。表現(xiàn)層模板分為控制層(Manager),頁(yè)面表示(List,,form,js)等。代碼如下:
……
public final class
ActionSupport {
@Autowired
private className/>Service; @PermissionFilter(ename=" Management") public String enter …… PageInfo< className/>Service.getCompanyToxicPageList(queryParameter, page, rows); gridPage=new GridPage< return SUCCESS; } …… 3 結(jié)束語(yǔ) 本引擎在研究J2EE輕型框架核心技術(shù)的基礎(chǔ)上,增加針對(duì)企業(yè)應(yīng)用系統(tǒng)的核心業(yè)務(wù),使用模板技術(shù)自動(dòng)生成基于J2EE輕型框架應(yīng)用系統(tǒng)各層的代碼。本引擎在實(shí)際使用過(guò)程中,能節(jié)省40%代碼編寫(xiě)工作量,大大提高了系統(tǒng)可維護(hù)性,同時(shí)也提高了系統(tǒng)的開(kāi)發(fā)效率,縮短了開(kāi)發(fā)周期,提高了對(duì)客戶需求變更的響應(yīng)速度。 參考文獻(xiàn): [1] 王懷民,周斌.企業(yè)應(yīng)用架構(gòu)模式[M].機(jī)械工業(yè)出版社,2006. [2] 徐愛(ài)春,章堅(jiān)民.基于XML/XLST代碼自動(dòng)生成技術(shù)研究[J].杭州電 子工業(yè)學(xué)院學(xué)報(bào),2004.24(4):64-68 [3] 徐愛(ài)春.區(qū)域化科技技術(shù)共享與服務(wù)平臺(tái)設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代情報(bào), 2010.3:71-74 [4] 徐愛(ài)春.電子商務(wù)教學(xué)資源庫(kù)共享服務(wù)平臺(tái)的研究與實(shí)現(xiàn)[J].湖州職 業(yè)技術(shù)學(xué)院學(xué)報(bào),2012.1:22-25 [5] Andresson.Overview and Industrial Application Of Code generators [J].Journal of System and Software,2004.32(3):185-214