APP下载

面向J2EE框架的代码自动生成引擎设计及实现

2012-04-29徐爱春

计算机时代 2012年11期

摘要: 针对目前J2EE应用系统项目开发存在交付滞后、维护性差等问题,提出了一种新的软件自动生成方法。设计了代码自动生成引擎的总体框架,给出了各个组成部分的详细设计方案,对关键组件进行了具体实现。该引擎为提高软件开发效率和降低软件开发成本提供了一种行之有效的途径和方法,在一定程度上降低了软件开发的风险。在实际项目开发中验证了该系统的可行性。

关键词: J2EE框架; 代码自动生成; 软件架构; 开发风险

中图分类号:TP311文献标志码:A 文章编号: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 引言

随着企事业单位信息化系统的迅速普及,基于J2EE架构的技术已经在各个系统开发中得到了广泛的应用。目前,在J2EE体系架构中,各种开源框架的J2EE架构已经比较成熟和稳定,并逐渐成为软件项目开发的首选和主流,优秀的开源框架在J2EE中的应用在一定程度上也促进了企业级应用的发展[1,2]。

基于J2EE轻型框架的开发给项目开发带来了革命性的突破。利用J2EE轻型框架[3,4],可以针对项目进行研发分层,实现项目的快速开发。但从现状来看,还面临着一些新的问题。

⑴ 项目过于集中,开发产能严重不足

由于大环境以及实际情况的影响,造成了项目开发往往集中在一个时间段内,而人力产能是单位时间内有限的关键资源,这会造成资源上的冲突,这种冲突会影响到公司承接项目的并行开发能力。

⑵ 项目工期紧,需求变更频繁,质量要求高

信息系统建设单位往往对时间要求很严格,质量要求高,在时间非常紧张的情况下,变更需求以至重新设计并且编码,无疑是对研发人员的严峻的考验,研发压力大,项目工期紧,项目质量有可能下降。

⑶ 系统可维护性差

由于开发人员风格有所不同,水平参差不齐,他们编写的代码千差万别,造成了程序风格不统一,修改、维护也很不方便,这最终造成项目维护的效率下降。

对于上述这些问题,我们迫切需要一种新的研发模式替代以前的研发模式。针对J2EE平台上开发的应用软件,需要一个基于关系数据库的应用软件的J2EE平台的代码自动生成引擎,实现基于关系数据库的业务系统的设计成果到实现代码的快速转化,并且可以实现由非J2EE的基于关系数据库的应用到先进的J2EE的平台的快速转化。缩短设计到代码实现的转化时间,节约人力资源的成本。最大限度地提高代码重用性、易维护性以及减轻开发人员负担。帮助开发人员从烦琐的编码的技术细节中解脱出来,把更多的时间和精力投入到业务问题的分析和研究上,提高软件的质量。

本文在研究各个开源框架的基础上,集成J2EE各层核心技术,开发了一套面向J2EE轻型框架应用的代码自动生成引擎[5],并在实际开发中得到了验证,取得了良好的应用效果。

1 系统总体框架

根据上述业务需求,结合J2EE应用系统各个层级之间的关系,本引擎的总体框架设计如图1所示。

图1总体框架

首先根据用户的业务需求进行建模,然后在此基础上进行数据库建模,本引擎根据数据库各个表的字段及拓扑关系,以及相应的业务控制文件,调用模板自动生成系统业务逻辑层、表示层、数据访问层,以及各个层之间的关系配置。

2 系统实现

2.1 数据访问层(DAO)代码生成

数据访问层主要实现与底层数据库交互,封装了数据的增、删、改、查等功能,代码自动生成引擎根据数据表的名称和字段,以及表之间的关系,在业务配置文件的指导下,调用数据访问层的模板,生成数据访问层代码,代码包括DAO接口及其实现,表的domain对象,若封装了iBatis O/R组件,则还自动生成SqlMap XML文件。数据访问层的接口代码模板如下:

……

public interface Dao {

public PageInfo<> get

className/>List(

classNameLower/>,int pageNum, int pageSize);

public get

ById(final

);

public Long saveTo

className/> );

……

上述模板中,XDtClass:className为XDoclet标签,获取表名称并根据规则转换成类名的一部分,为获得表中的主键。

数据访问层模板可以根据不同的持续化组件生成相应实现代码,如hibernate、iBatis,数据访问层的接口iBatis实现代码模板如下:

……

public class DaoiBatis extends BaseDao

implements Dao {

public void save(final

className/> ) {

=.

getType="getterName"/>();

if (== null) {

=(

getSqlMapClientTemplate().insert("add

className/>", );

} else {

getSqlMapClientTemplate().update("update

className/>", );

}

if(==null) {

throw new ObjectRetrievalFailureException(

className/>.class,

="propertyName"/>);

}

}

……

上述模板代码以iBatis持续化组件为基础,生成DAO层的接口、接口实现以及SqlMap,也可以按照业务需求,将相应的模板替换成基于hibernate等持续化层的实现。

2.2 业务逻辑层(Service)代码生成

业务逻辑层是整个应用系统的核心,引擎根据不同业务需求定制不同的业务模板,业务逻辑层根据所接收到的Controller层不同命令进行业务处理,然后确定应该调度哪些数据访问层接口。以下代码为通用的业务逻辑层模板具体实现代码:

……

public class ServiceImpl extends

BaseService implements Service {

@Autowired

private Dao dao;

public GridPage< >get

className/>InfoList(final String

getType="propertyName"/>) {

return dao.get(new

));

}

……

业务逻辑层模板中,针对复杂的业务逻辑,应该在代码生成之后,根据需要进行定制,模板只能生成业务逻辑而不是复杂的代码。

2.3 表现层代码生成

表现层实现应用系统与用户交互,表现层将用户各种请求提交给控制层,控件层根据不同需求去请求业务逻辑层,并把处理结果反馈给表现层。表现层模板分为控制层(Manager),页面表示(List,,form,js)等。代码如下:

……

public final classController extends

ActionSupport {

@Autowired

privateService

className/>Service;

@PermissionFilter(ename="

Management")

public String enter InfoPage() {

……

PageInfo<> list=

className/>Service.getCompanyToxicPageList(queryParameter, page, rows);

gridPage=new GridPage<>(list);

return SUCCESS;

}

……

3 结束语

本引擎在研究J2EE轻型框架核心技术的基础上,增加针对企业应用系统的核心业务,使用模板技术自动生成基于J2EE轻型框架应用系统各层的代码。本引擎在实际使用过程中,能节省40%代码编写工作量,大大提高了系统可维护性,同时也提高了系统的开发效率,缩短了开发周期,提高了对客户需求变更的响应速度。

参考文献:

[1] 王怀民,周斌.企业应用架构模式[M].机械工业出版社,2006.

[2] 徐爱春,章坚民.基于XML/XLST代码自动生成技术研究[J].杭州电

子工业学院学报,2004.24(4):64-68

[3] 徐爱春.区域化科技技术共享与服务平台设计与实现[J].现代情报,

2010.3:71-74

[4] 徐爱春.电子商务教学资源库共享服务平台的研究与实现[J].湖州职

业技术学院学报,2012.1:22-25

[5] Andresson.Overview and Industrial Application Of Code generators

[J].Journal of System and Software,2004.32(3):185-214