蒋卫祥 陈荣保
(常州信息职业技术学院电子与电气工程学院 江苏常州 213164)
构件技术是指通过组装一系列可复用的软件构件来构造软件系统的软件技术。通过运用构件技术,开发人员可以有效地进行软件复用,减少重复开发,缩短软件的开发时间,降低软件的开发成本。构件组装技术是基于构件开发的核心技术,构件的最终目的是为组装技术服务的,构件必须经过组装才能形成应用系统。本文首先分析了构件组装相关技术,提出了一种基于SSH 框架的构件组装模型,并将这一模型应用到集中支付管理系统的开发上。实践表明这种构件组装模型能提高构件组装效率,提高软件开发质量。
构件组装是指将构件库中的构件经过适当修改后相互连接,或者将它们与当前开发项目中的软件元素相连接,最终构成新的目标软件[1]。
根据构件组装时需要对构件内部细节了解的程度,将构件的组装方法按其特征分为黑盒组装方法、白盒组装方法和灰盒组装方法[2]。
1)黑盒组装方法是不需要对构件的实现细节有所了解,也不需要对其配置进行修改,它要求用有限的构件集合通过“组装运算”而形成无限且不断演变的应用结合。
2)白盒组装方法要求将构件的所有细节都展现出来,让组装人员理解后再进行组装,并可以对构件应用的需求进行适当地修改。
3)灰盒组装方法介于黑盒和白盒之间,灰盒组装方法通过调整构件的组装机制而不是通过修改构件来满足应用系统组装的需求,这样既实现了构件组装的灵活性,又不至于组装过程过于复杂。
灰盒组装方法的研究重点集中在基于框架的组装、基于软件体系结构组装、基于连接器的组装和基于胶合代码安装。本文的构件组装模型属于灰盒组装,SSH 框架将系统分解为高内聚、松耦合的功能构件,对其进行适应性修改后再组装到相应的功能框架中。
SSH 框架是新的MVC 软件开发模式。该框架将整个系统分为表示层、业务层、数据持久层。SSH框架通过Struts 负责在表示层中处理页面的请求和转发工作;通过Spring 容器管理机制负责在业务层处理业务逻辑工作;通过Hibernate 完成在持久层与数据库的交互工作。这样形成一个结构良好、功能强大、层次清晰的框架体系。SSH 框架能简化系统的开发,可以有效地降低各层之间的耦合度,提高系统的可维护性[3]。
Struts2 是一种可扩展的web 框架。Struts2 是在MVC 架构模式上构建的一种web 解决方案。Struts2 框架由3 个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3 个部分里,Struts2 框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。
Spring 是一个开源框架,它是为了解决企业应用开发的复杂性而创建的。Spring 使用基本的JavaBean 来完成以前只可能由EJB 完成的事情,Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
Hibernate 是非常优秀、成熟的O/R Mapping框架,它提供了强大、高性能的Java 对象和关系数据的持久化和查询功能。Hibernate 作为持久层的一项实现技术,运用DAO(Data Access Object)设计模式来实现对象和关系数据库之间的映射,对JDBC 进行了轻量级的对象封装,在Java 应用和关系数据库之间建立桥梁,Java 程序员可以完全使用面向对象的编程思维来操作关系数据库。
SSH 框架将web 系统分为不同的层次,每一个层次都由不同的构件构成,构件通过SSH 框架中的配置文件组装,SSH 框架的构件组装模型如图1 所示。
图1 SSH 框架的构件组装模型
SSH 框架中web 客户端由JSP、JSTL、Servlet等构件构成,Struts2 框架包括Struts 控制器、拦截器,业务层是管理业务构件,由Spring 框架实现,持久层提供了数据库的连接、持久化实体构件的管理。业务层的构件应用applicationContext.xml 配置文件组装,持久层的实体构件应用hibernate.cfg.xml配置文件组装,Struts 的Action、拦截器应用struts.xml 配置文件组装。web 客户端的构件应用脚本编程方式的组装。整个web 系统的组装通过web.xml 配置文件组装。
集中支付管理系统是金财工程的重要组成部分,通过结算中心领导审核同意后,打印支付凭证,把纸质支付凭证送代理银行,代理银行分解到银行各网点。代理银行实施支付,最后进行日终清算。对于工资统发处理如下:直接从工资统发系统或电子文档生成直接支付信息,同时扣减额度;对于政府采购处理如下:单位同时填写用款计划和政府采购信息,用款计划报国库处,政府采购信息报采购处。集中支付管理系统主要包括指标管理、指标执行、计划管理、审核管理等功能。系统用例图如图2 所示。
图2 集中支付管理系统用例图
根据系统的用例图,细化用例图及系统类图得到系统的构件,系统的构件包括web 客户端的页面构件、业务模块构件、持久层实体构件、数据库操作构件、报表打印构件等。系统业务构件如图3 所示。
图3 集中支付管理系统构件图
本文以计划管理模块为例说明系统构件组装过程。计划管理模块主要用于业务处审核单位上报的月度用款计划以及代编单位用款计划,国库处审核并汇总下达用款计划。计划管理模块的设计基于SSH 框架的构件技术实现,计划管理模块的构件包括:JSP 页面、Struts 框架构件、业务层Spring 构件、持久层构件、web 容器构件。计划管理模块中的构件组装如图4 所示。
图4 计划管理模块构件组装图
计划管理模块中的构件根据构件类型应用不同的组装方式,具体组装步骤为:
1)web 客户端构件的组装。计划管理模块的web 客户端页面:planManager.jsp(计划管理页面)、planEdit.jsp(计划编辑页面)、planList.jsp(计划显示页面)。JSP 页面构件是基于脚本编程方法组装,在Struts 的中的Action 调用或者在struts.xml 中配置。
2)表示层构件的组装。计划管理模块web 页面提交给Struts 表示层处理,表示层构件是基于Struts 框架组装的,Struts 框架应用struts.xml 配置文件组装构件,struts.xml 配置文件如下:
其中plan 是web 页面提交处理Action 的name,result 表示Action 处理后根据返回的字符串转到不同的页面显示。struts.xml 配置文件将web客户端页面与Struts 构件组装到一起。
3)业务层构件的组装。计划管理模块的业务层构件由Spring 框架实现,Spring 框架应用applicationContext.xml 配置文件组装系统的构件,applicationContext.xml 配置文件如下:
在applicationContext.xml 配置文件中plan-Action(计划管理控制类)通过IOC(控制反转)自动装配planService(计划管理服务类),planService通过IOC(控制反转)自动装配planDAO(计划管理接口)。通过applicationContext.xml 配置文件将业务层中的构件组装到一起。
4)持久层构件的组装。计划管理模块的持久层是实体构件,持久层实体构件是基于Hibernate 框架组装的,Hibernate 框架应用hibernate.cfg.xml 配置文件组装实体构件,hibernate.cfg.xml 配置文件如下:
持久层通过hibernate.cfg.xml 配置文件将实体构件组装到一起。
5)web 容器的构件组装。web 容器的构件组装是在web.xml 文件中配置,主要配置Struts 与Spring,服务器启动时自动装载web.xml。web.xml 文件配置如下:
web.xml 中配置是过滤器,通过配置过滤器web 容器启动时自动加载Struts 框架和Spring 框架,web.xml 配置文件将SSH 框架中的构件组装到一起,最后打包成war 文件。
本文提出了基于SSH 框架的构件组装模型,并在集中支付管理系统开发中应用。SSH 框架的构件组装模型主要包括:基于Struts 框架的安装、基于Spring 框架的安装、基于Hibernate 框架的安装、基于web 容器的安装。实践表明基于SSH 框架的构件组装模式是一种层次结构清晰的构件安装模型,各类构件各施其责,互补和协调,并发挥web 程序的最佳特性,提高了软件开发质量,实现了软件重用。下一步主要的工作研究基于异构构件的软件开发过程与构件库的设计与检索。
[1]叶俊民,陈卓,雷志翔,等.基于构件组装的应用软件开发过程研究[J].计算机应用研究,2008(6):1736-1738.
[2]王志坚,费玉奎,楼渊清.软件构件技术及应用[M].北京:科学技术出版社,2007:8.
[3]朱敏.一种基于SSH 框架的MIS 代码生成系统的设计与实现[J].南京师范大学学报:工程技术版,2012(6):49-53.