信息系统工程论文第五篇:信息系统开发中逆向工程技术的运用探析
摘要:在互联网技术飞速发展的今天,为了提升企业的经营效率、降低管理成本,越来越多的企业致力于投入资金和人力建立符合自身业务需要的信息系统。在企业级信息系统的设计思想领域,Java EE的三层架构思想一直占有着主导地位。表现层负责将数据以用户需要的形式进行展示;业务逻辑层针对具体的问题,调用Service或Service的组合来处理问题;数据访问层则负责操作数据库、完成具体的实现。数据访问层的代码具有结构相似、重复率高的特点,缩短数据访问层的开发周期具有重要意义,阐释了利用逆向工程工具生成数据访问层的代码,这种策略能够大幅缩短数据访问层的开发周期、提高开发效率。
关键词:逆向工程;数据访问层;系统开发; Spring框架;企业应用;
1 研究的背景及意义
在互联网技术飞速发展的今天,为了提升企业的经营效率、降低管理成本,越来越多的企业致力于投入资金和人力建立符合自身业务需要的信息系统。在企业级信息系统的设计思想领域,Java EE的三层架构思想一直占有着主导地位。近20年来,占有率最高的技术组合从最初的JSP+Servlet+DAO,变成了SSH,然后是SSM,到最近的Spring Boot、Spring Cloud,无论哪一种技术组合,都在三层架构的思想下进行设计和编码,即:表现层负责将数据以用户需要的形式进行展示;业务逻辑层针对具体的问题,调用Service或Service的组合来处理问题;数据访问层则负责操作数据库、完成具体的Service实现。对大量系统项目的代码进行分析和比较后不难发现,数据访问层具有以下特点:
(1)代码量占比相对较高。数据访问层代码量大概占整个系统编码总量的20%~30%;在以数据分析、统计为主要功能的系统中,数据访问层的代码占比甚至能到达40%。
(2)代码的重复率较高。不管DAO层包含多少张数据表,对它们进行Create、Retrieve、Update、Delete4种操作的语句的语法、结构都是相同的,差异仅在于表名、参数等部分,这使得DAO层的代码重复率、相似度非常高。
从软件开发者的角度看,DAO层的代码若采用人工编写的方式编写,尽管可行,但创造性劳动较少,是一个相对冗长、乏味的过程。若能找到一种自动化的方法完成上述编码工作,至少有以下两个方面的好处:(1)从程序员的角度看,能够免去冗长、乏味的编码过程,从而有更多精力专注于业务逻辑、用户界面、用户体验等部分;(2)从企业的角度看,能够降低DAO层的开发周期、减少所需的人力、节省成本。
逆向工程是从已完成的产品或系统出发,借助各种工具进行分析和研究,进而推导出该产品的处理流程、组织结构、功能特性、技术规格等设计要素的技术。与直接开发相比,借助逆向工程技术来开发能在一定程度上缩短开发周期、减少投入经费、减少人力成本,并取得功能相似的产品。以My Eclipse、Oracle数据库为例,阐释如何采用逆向工程技术自动实现上述目标。
2 逆向工程技术使用流程
图1 逆向工程工具使用流程
2.1 在IDE中添加逆向工程插件
以My Eclipse 2017、Hibernate框架为例,添加插件的步骤为:在My Eclipse的Project Explorer中选中项目,右键菜单【Configure Facets】-->【Install Hibernate Facet】,即完成了逆向工程插件的添加。
2.2 创建数据库、表结构、表约束
以租房信息管理系统的表结构为例,将被执行逆向工程的表的结构信息如下:
(1)用户表User (ID,Name,Password,Telephone,Use-rname)
(2)房屋类型表Type (ID,Name)
(3)街道表Street (ID,Name,district_id)
(4)区表District (ID,Name)
(5)房屋表House (ID,User_id,type_id,street_id,ti-tle,price,floorage,imge)
用下划线标记的字段为主键;用波浪线标记的字段为外键。
2.3 利用逆向工程工具生成DAO层代码
2.3.1 开启Database Explorer
在My Eclipse 207中依次选择菜单【Window】-->【Perspective】-->【Open Perspective】-->【Database Explorer】。
2.3.2 添加Oracle数据库连接
在【DB Browser】中依次选择菜单【New】-->【输入数据库配置信息(驱动信息、连接URL、用户名、密码)】-->【连接】,可连接上数据库并查看到所有的Schema和数据库对象。
2.3.3 对表使用逆向工程
在Schema中找到要执行逆向工程的5张表。然后右键菜单【Hibernate Reversing Engineering】--设置生成的DAO层代码保存路径--Finish,即可完成DAO层代码的生成。
上述5表生成的DAO层主要类如下:
(1) District DAO,持久化操作District表。(2)House DAO表,持久化操作House表。(3) Street DAO,持久化操作Street表。(4) User DAO,持久化操作User表。(5) Type DAO,持久化操作Type表。(6) Hibernate Session Factory,创建Sessesion Factory。(7) BaseHibernate DAO,基类,提供访问数据库所需的Session。
3 对DAO层代码进行必要调整、集成到系统
3.1 代码调整
逆向工程工具生成的DAO类的基本成员类型,有时会需要进行必要的调整,调整主要涉及到两个方面:
3.1.1 DAO类基本属性类型的调整
例如,DAO类代码中映射主键的ID字段的类型为Java.lang.Double,大多情况下调整为Java.lang.Integer较合适。
3.1.2 手动创建某些名称特殊的DAO类
例如,数据库中房屋类型Type表,由于Type类为Jdk中已有的类,因而无法生成Type.java和Type DAO.java。这种情况下,只能手动创建Type.java、Type DAO.java。当逆向工程工具遇到名字特殊的表时,不能正常生成。解决这个问题的方式是,预先将表的名称修改成非特殊名称,然后再使用逆向工程工具。
3.2 集成到系统
根据是否系统是否采用了Spring,集成方式分为以下两种情况:未采用Spring的系统、采用了Spring的系统。
3.2.1 未采用Spring的系统
可直接集成。即,在服务层直接使用new的方式创建DAO对象,然后对相应的表进行持久化操作。
3.2.2 采用了Spring的系统
采用了Spring的系统,Spring的IOC容器中创建并维护着操作数据库所需的Session Factory Bean。在这种情形下,DAO对象中的Session Factory应采用用自动装配的方式从Spring的IOC容器中获取Session Factory,不再采用new的方式创建。
3.3 在DAO中添加自定义的数据库访问方法
通过逆向工程工具生成的DAO类中具备方法较多,常用的如下(以House DAO为例):
(1) void delete (House),删除House对象对应的记录。(2) List find All(),查询House表中的所有记录。(3) List find By Example (House),查询House表中属性与参数匹配的记录。(4) List find By Property (String,Object),根据属性名、属性值查询表中能匹配的记录。(5) House merge (House),将传入的托管态的对象的属性复制到持久化对象中,并返回持久化对象。(6) void save (House),根据House对象在表中插入新纪录。
4 结语
逆向工程工具的采用使得数据访问层代码的生产方式从人工编写转变成了自动生成,大幅地提高了开发效率、缩短了编码周期,从而使得开发人员能够将更多的精力专注于业务层、用户界面、用户体验的工作,具有相当的使用价值。
参考文献
[1]王奎.基于SSM框架的Java Web开发课程教学中的几点思考[J].电脑知识与技术,2018,(27).
[2]吴官学基于Spring MVC酒店信息管理系统[D].吉林大学2018.
[3]葛萌基于Spring MVC框架的Java Web应用[J].计算机与现代化,2018.(08).
[4]徐波,王建英服务器监控系统实现方案[J].电脑编程与维护技巧,2019,(03).
[5]韩改宁,韩丽娜嵌入式Web服务器的实施监控系统设计[J].单片机与嵌入式系统应用,2018,(03).