论文部分内容阅读
[摘要]软件复用是在软件开发中避免重复劳动的解决方案。通过软件复用,可以提高软件开发的效率和质量。软件复用被视为解决软件危机,提高软件生产效率和质量的现实可行的途径。主要研究以日本一家中型自动售货连锁店信息管理系统中总部业务管理子系统(AMSystem)为背景,探讨在struts框架下,MVC Model2设计模式在系统中的实现,并在此基础上对系统中通用性功能进行抽象,设计并实现这些通用性组件,以方便各个模块开发人员复用,提高开发效率和产品质量。
[关键词]软件复用 struts框架 组件 log4j
中图分类号:TP311.52 文献标识码:A 文章编号:1671-7597(2008)1110065-02
一、引言
项目开发背景是应用于日本一家中型自动售货连锁店信息管理系统,系统的功能是实现该自动售货连锁店日常经营活动的管理以及财务管理。它分为如下三个子系统:总部业务管理子系统、店铺业务管理子系统以及财务管理子系统。AMSystem是该系统的核心子系统总部业务管理子系统的英文名称。本论文以下的讨论也是基于此子系统来展开的。
该连锁店公司下属各店铺分布于日本全国各大中城市,主要通过各种自动售货机或游戏机销售各种小型商品,每年销售额大约二百多亿日元,员工两百多人。各个分店在总部的统一管理下,按相同模式统一经营管理。
二、AMSystem系统功能性需求分析
AMSystem系统分为五个模块:基础数据维护模块、商品管理模块、售货机管理模块、预算和库存盘点业务模块和批处理业务模块。系统结构图如图1所示,各个模块的功能如下所述。
(一)基础数据维护模块
在AMSystem系统中各店铺、供应商及商品的信息数据相对稳定,需要对其进行修改或新增需要一定级别的人员才能有权操作,比如部门经理等。这些数据是系统管理的基础,其它模块的运行都依赖于这些基础数据。该模块实现对这些基础数据的维护,比如增加、删除、修改等等。该模块还完成对系统的日常维护管理。
(二)商品管理模块
实现总部对连锁店所销售的商品的业务管理。主要完成以下功能:总部接受到各店铺(包括总部)的订货请求后形成订货申请书(总部有权修改订货数据),获得批准后向供应商发出订货请求,商品入库验收形成入库单、出库配送向各分店配送商品。总部根据店铺业务子系统上传的订货需求,自动生成订货申请书经批准后向供应商发出订货请求。总部根据库存商品及各店铺前一段时间的销售情况,自动将库存商品配送到各店铺。
(三)售货机管理模块
该连锁店主要通过两种途径来销售商品。一种就是通过自动售货机来销售各种小型商品;另一种就是通过游戏机,在娱乐中销售毛绒玩具类的小型商品。该模块实现自动售货机(包括游戏机)的购买、转移、报废、出售的整个生命周期的业务管理。
(四)预算和盘点业务分系统
完成商品的每周库存盘点,每月财务预算功能。完成售货机的固定资产管理,财务预算功能。并且生成财务系统所需的特定格式的数据文件。
(五)批处理业务分系统
实现与外系统的通讯。主要是与运行于AS/400中的财务系统,店铺业务系统之间的通讯。该类操作在日常办公业务处理完成后,通常在夜间采用批处理方式完成作。
三、系统技术背景
(一)基于复用的软件开发思想
随着软件规模的不断扩大,人们对软件生产效率和软件质量的要求越来越高。目前,软件复用是提高软件生产效率和软件质量的现实可行的途径。软件复用的思想最早是在1968 年NATO 的软件过程会议上提出的。软件复用是指重复使用“为了复用而设计软件”的过程,目的是在软件开发中将已有的软件成分用于构造新的软件系统,避免重复劳动。
软件复用不仅仅是对程序的复用,它还包括对软件生产过程中任何活动所产生的结果的复用。目前最有可能产生显著效益的复用是对软件生命周期中一些主要开发阶段的软件制品的复用,按抽象程度的高低,可以划分为:(a)代码复用;(b)设计复用;(c)分析复用;(d)测试信息复用等。大部分软件的生产过程是使软件产品从抽象级别较高的形态向抽象级别较低的形态演化,较高级别的复用容易带动较低级别的复用,因而复用的级别越高,可得到的回报也越大。
(二)Struts框架简介
Struts是一个免费的Open Source的J2EE Web层的应用架构,它继承了MVC的各项特性,包括框架类、帮助类和定制的JSP标签库,以及所有基于J2EE Model2设计模式的应用技术。Struts框架的应用使系统支持增量式开发,具有良好的可扩展性。它还有助于提高代码的可重用性和灵活性,可以大大提高WEB应用的开发速度。通过将问题划分为更小的组件,当技术空间或问题空间中出现变化时,就有更多的机会重用代码。此外,Struts 使网页设计人员和 Java 开发人员能将精力集中于自己最擅长的方面。
四、AMSystem系统架构设计
(一)AMSystem系统架构
根据基于软件复用的开发思想及struts框架的应用,设计出系统架构如图2所示。系统逻辑上分成四个层次:客户端、Web服务器、应用服务器和数据库服务器。客户端主要负责人机交互,通常由一组JSP文件构成;Web服务器主要负责对客户端访问请求的集中授理和信息发布,接收HTTP请求信息,然后再调用相应的业务逻辑,控制器是由ActionServlet实现的;应用服务器主要负责应用逻辑程序的集中管理,即事务处理,可以根据其处理的具体业务不同而分为多个;数据服务器主要负责数据的存储和组织、数据库的分布式管理、数据库的备份和同步等。
在实际应用中,我们在系统的业务处理逻辑中抽取其中公共的功能,比如日志操作、权限判断和数据检验等等,这些都是几乎在每个模块的实现中都需要的功能。这些通用功能归类到一起,形成一个逻辑上的通用模块。这也是我们后面将要提到的通用性组件的基础。
1.客户端Browser通过Browser发出请求。
2.Controller(在本系统中是ActionServlet)把请求转发至Model(在本系统中由ActionForm和Java Bean组成),调用相应的业务处理逻辑。
3.Model调用Uitl模块,发送用户信息操作信息,进行业务处理前操作。
4.Uitl(由日志操作、数据校验等通用组件组成)进行访问前的日志操作。这里的日志主要是指用户登录的日志信息,在AMSystem系统中每一步业务处理中或异常情况发生时都有日志信息输出。
5.Uitl进行业务种别判断。在AMSystem中业务种别分为日常办公和批处理。在白天办公时间不可以进行批处理业务,在夜间进行批处理业务时不可以进行办公操作。
6.用户权限判断。
7.Uitl返回业务种别和权限判断结果。
8.Model向Util传递表单数据。
9.表单数据的正准确性检验。
10.返回表单数据校验结果。
11.Model进行相应的业务处理。
12.Model调用Util模块,发送用户的会话和操作信息,进行业务处理后操作。
13.Util进行访问后的日志操作。这里的日志主要是指用户退出系统的日志信息,在AMSystem系统中每一步业务处理中或异常情况发生时都有日志信息输出。
14.Util返回操作结果。
15.Model将操作得到的结果集以及将要跳转的页面返回给Controller。
16.Controller将结果集转发至相应的View(由一系列JSP文件组成)。
17.生成相应的HTML页面并返回客户端浏览器进行显示。
五、软件复用技术在AMSystem中的运用
在AMSystem项目开发中我们也遵循着软件复用的开发思想。首先尽可能地复用现有的软件成果。主要就复用在技术上已经成熟的开源软件,比如:1. 在架构上采用struts框架,Struts是当非常流行的java web应用框架,它可以大大提高WEB应用的开发速度。2. 在日志输出组件的实现中我们采用了log4J日志操作包,log4J是目前最灵活,通用性最好的日志输出软件包,我们在log4J的基础上开发出适合于本系统的日志输出组件。3. 数据库操作组件的实现中我们采用了开源项目org.apache.commons.dbutils
组件,这一组件的使用我们在进行数据操作的代码量大为减少。其次,自行开发本系统的通用性组件。在AMSystem系统的开发中运用软件复用的思想对系统需求进行分析,提取出系统中的通用性功能并进行分类,在系统架构的基础上设计并实现这些通用性组件,以方便各个模块开发人员的复用,提高开发效率和产品质量。
六、总结
AMSystem系统项目从最初的详细设计到最终的产品交付,只有短短的六个多月的时间,在这六个多月的时间里要完成详细设计、代码编写、测试用例设计、单元测试、集成测试的整个过程。为了在这么短的时间里能交付出满足用户要求的产品,最好的办法就是尽可能的采用软件复用技术,经过讨论我们确定了复用方案。首先在架构上我们采用struts框架这一开源项目,节省了大量框架设计时间,同时我们在一功能性的设计上也尽可能复用当前流行的开源软件,比如日志输出组件Log4J和数据库操作上复用org.apache.commons.dbutils组件等。另外一个最重要的措施是我们在系统中分析提炼出本系统的通用功能,形成通用性组件,以提供给各个模块去复用。我们在项目的设计阶段,根据系统模块划分将开发人员分成四个小组,同时每个小组抽出一人再组成一个通用模块组,各个小组长定期由项目经理召集在一起开会,并由各个小组向项目经理提出通用功能,经讨论通过后提交给通用模块组设计。通用模块组在设计完以后,会马上进行编码实现并测试。这样保证各个模块的开发人员在需要复用通用模块的时候,能有东西可以复用。正是由于我们采用了软件复用技术,尤其是这些通用模块的复用,才保证了能在规定的时间里按质按量向客户交付产品,同时也大大减少了程序中的代码冗余,提高了我们的开发效率,提高了系统的质量和可维护性。
本文是作者根据自己的实际工作对AMSystem系统中通用性组件的分析与总结,尤其是重点论述了该系统中最重要也是复用率最高的两类组通用性组件即日志输出组件和数据库操作组件的设计与实现。
参考文献:
[1]杨芙清,梅宏,吕建,金芝 浅论软件技术发展.电子学报.2002.30(12A):1901-1906.
[2]杨芙清,软件复用及相关技术.计算机科学 1999.26(5)1-4.
[3]王千祥,应用服务器原理与实现.电子工业出版社.2003年.
[4]冯汉平、何踊跃、吴琢琼,通用数据库操作模块的设计与实现.计算机工程 1999年第10期.
[5]肖文、尹建伟、陈刚、董金祥,基于J2EE的日志管理中间件的设计和实现.计算机应用研究.2004年第10期.
作者简介:
徐义晗,男,汉族,安徽安庆人,讲师,主要研究方向:软件复用,软件构件技术。
[关键词]软件复用 struts框架 组件 log4j
中图分类号:TP311.52 文献标识码:A 文章编号:1671-7597(2008)1110065-02
一、引言
项目开发背景是应用于日本一家中型自动售货连锁店信息管理系统,系统的功能是实现该自动售货连锁店日常经营活动的管理以及财务管理。它分为如下三个子系统:总部业务管理子系统、店铺业务管理子系统以及财务管理子系统。AMSystem是该系统的核心子系统总部业务管理子系统的英文名称。本论文以下的讨论也是基于此子系统来展开的。
该连锁店公司下属各店铺分布于日本全国各大中城市,主要通过各种自动售货机或游戏机销售各种小型商品,每年销售额大约二百多亿日元,员工两百多人。各个分店在总部的统一管理下,按相同模式统一经营管理。
二、AMSystem系统功能性需求分析
AMSystem系统分为五个模块:基础数据维护模块、商品管理模块、售货机管理模块、预算和库存盘点业务模块和批处理业务模块。系统结构图如图1所示,各个模块的功能如下所述。
(一)基础数据维护模块
在AMSystem系统中各店铺、供应商及商品的信息数据相对稳定,需要对其进行修改或新增需要一定级别的人员才能有权操作,比如部门经理等。这些数据是系统管理的基础,其它模块的运行都依赖于这些基础数据。该模块实现对这些基础数据的维护,比如增加、删除、修改等等。该模块还完成对系统的日常维护管理。
(二)商品管理模块
实现总部对连锁店所销售的商品的业务管理。主要完成以下功能:总部接受到各店铺(包括总部)的订货请求后形成订货申请书(总部有权修改订货数据),获得批准后向供应商发出订货请求,商品入库验收形成入库单、出库配送向各分店配送商品。总部根据店铺业务子系统上传的订货需求,自动生成订货申请书经批准后向供应商发出订货请求。总部根据库存商品及各店铺前一段时间的销售情况,自动将库存商品配送到各店铺。
(三)售货机管理模块
该连锁店主要通过两种途径来销售商品。一种就是通过自动售货机来销售各种小型商品;另一种就是通过游戏机,在娱乐中销售毛绒玩具类的小型商品。该模块实现自动售货机(包括游戏机)的购买、转移、报废、出售的整个生命周期的业务管理。
(四)预算和盘点业务分系统
完成商品的每周库存盘点,每月财务预算功能。完成售货机的固定资产管理,财务预算功能。并且生成财务系统所需的特定格式的数据文件。
(五)批处理业务分系统
实现与外系统的通讯。主要是与运行于AS/400中的财务系统,店铺业务系统之间的通讯。该类操作在日常办公业务处理完成后,通常在夜间采用批处理方式完成作。
三、系统技术背景
(一)基于复用的软件开发思想
随着软件规模的不断扩大,人们对软件生产效率和软件质量的要求越来越高。目前,软件复用是提高软件生产效率和软件质量的现实可行的途径。软件复用的思想最早是在1968 年NATO 的软件过程会议上提出的。软件复用是指重复使用“为了复用而设计软件”的过程,目的是在软件开发中将已有的软件成分用于构造新的软件系统,避免重复劳动。
软件复用不仅仅是对程序的复用,它还包括对软件生产过程中任何活动所产生的结果的复用。目前最有可能产生显著效益的复用是对软件生命周期中一些主要开发阶段的软件制品的复用,按抽象程度的高低,可以划分为:(a)代码复用;(b)设计复用;(c)分析复用;(d)测试信息复用等。大部分软件的生产过程是使软件产品从抽象级别较高的形态向抽象级别较低的形态演化,较高级别的复用容易带动较低级别的复用,因而复用的级别越高,可得到的回报也越大。
(二)Struts框架简介
Struts是一个免费的Open Source的J2EE Web层的应用架构,它继承了MVC的各项特性,包括框架类、帮助类和定制的JSP标签库,以及所有基于J2EE Model2设计模式的应用技术。Struts框架的应用使系统支持增量式开发,具有良好的可扩展性。它还有助于提高代码的可重用性和灵活性,可以大大提高WEB应用的开发速度。通过将问题划分为更小的组件,当技术空间或问题空间中出现变化时,就有更多的机会重用代码。此外,Struts 使网页设计人员和 Java 开发人员能将精力集中于自己最擅长的方面。
四、AMSystem系统架构设计
(一)AMSystem系统架构
根据基于软件复用的开发思想及struts框架的应用,设计出系统架构如图2所示。系统逻辑上分成四个层次:客户端、Web服务器、应用服务器和数据库服务器。客户端主要负责人机交互,通常由一组JSP文件构成;Web服务器主要负责对客户端访问请求的集中授理和信息发布,接收HTTP请求信息,然后再调用相应的业务逻辑,控制器是由ActionServlet实现的;应用服务器主要负责应用逻辑程序的集中管理,即事务处理,可以根据其处理的具体业务不同而分为多个;数据服务器主要负责数据的存储和组织、数据库的分布式管理、数据库的备份和同步等。
在实际应用中,我们在系统的业务处理逻辑中抽取其中公共的功能,比如日志操作、权限判断和数据检验等等,这些都是几乎在每个模块的实现中都需要的功能。这些通用功能归类到一起,形成一个逻辑上的通用模块。这也是我们后面将要提到的通用性组件的基础。
1.客户端Browser通过Browser发出请求。
2.Controller(在本系统中是ActionServlet)把请求转发至Model(在本系统中由ActionForm和Java Bean组成),调用相应的业务处理逻辑。
3.Model调用Uitl模块,发送用户信息操作信息,进行业务处理前操作。
4.Uitl(由日志操作、数据校验等通用组件组成)进行访问前的日志操作。这里的日志主要是指用户登录的日志信息,在AMSystem系统中每一步业务处理中或异常情况发生时都有日志信息输出。
5.Uitl进行业务种别判断。在AMSystem中业务种别分为日常办公和批处理。在白天办公时间不可以进行批处理业务,在夜间进行批处理业务时不可以进行办公操作。
6.用户权限判断。
7.Uitl返回业务种别和权限判断结果。
8.Model向Util传递表单数据。
9.表单数据的正准确性检验。
10.返回表单数据校验结果。
11.Model进行相应的业务处理。
12.Model调用Util模块,发送用户的会话和操作信息,进行业务处理后操作。
13.Util进行访问后的日志操作。这里的日志主要是指用户退出系统的日志信息,在AMSystem系统中每一步业务处理中或异常情况发生时都有日志信息输出。
14.Util返回操作结果。
15.Model将操作得到的结果集以及将要跳转的页面返回给Controller。
16.Controller将结果集转发至相应的View(由一系列JSP文件组成)。
17.生成相应的HTML页面并返回客户端浏览器进行显示。
五、软件复用技术在AMSystem中的运用
在AMSystem项目开发中我们也遵循着软件复用的开发思想。首先尽可能地复用现有的软件成果。主要就复用在技术上已经成熟的开源软件,比如:1. 在架构上采用struts框架,Struts是当非常流行的java web应用框架,它可以大大提高WEB应用的开发速度。2. 在日志输出组件的实现中我们采用了log4J日志操作包,log4J是目前最灵活,通用性最好的日志输出软件包,我们在log4J的基础上开发出适合于本系统的日志输出组件。3. 数据库操作组件的实现中我们采用了开源项目org.apache.commons.dbutils
组件,这一组件的使用我们在进行数据操作的代码量大为减少。其次,自行开发本系统的通用性组件。在AMSystem系统的开发中运用软件复用的思想对系统需求进行分析,提取出系统中的通用性功能并进行分类,在系统架构的基础上设计并实现这些通用性组件,以方便各个模块开发人员的复用,提高开发效率和产品质量。
六、总结
AMSystem系统项目从最初的详细设计到最终的产品交付,只有短短的六个多月的时间,在这六个多月的时间里要完成详细设计、代码编写、测试用例设计、单元测试、集成测试的整个过程。为了在这么短的时间里能交付出满足用户要求的产品,最好的办法就是尽可能的采用软件复用技术,经过讨论我们确定了复用方案。首先在架构上我们采用struts框架这一开源项目,节省了大量框架设计时间,同时我们在一功能性的设计上也尽可能复用当前流行的开源软件,比如日志输出组件Log4J和数据库操作上复用org.apache.commons.dbutils组件等。另外一个最重要的措施是我们在系统中分析提炼出本系统的通用功能,形成通用性组件,以提供给各个模块去复用。我们在项目的设计阶段,根据系统模块划分将开发人员分成四个小组,同时每个小组抽出一人再组成一个通用模块组,各个小组长定期由项目经理召集在一起开会,并由各个小组向项目经理提出通用功能,经讨论通过后提交给通用模块组设计。通用模块组在设计完以后,会马上进行编码实现并测试。这样保证各个模块的开发人员在需要复用通用模块的时候,能有东西可以复用。正是由于我们采用了软件复用技术,尤其是这些通用模块的复用,才保证了能在规定的时间里按质按量向客户交付产品,同时也大大减少了程序中的代码冗余,提高了我们的开发效率,提高了系统的质量和可维护性。
本文是作者根据自己的实际工作对AMSystem系统中通用性组件的分析与总结,尤其是重点论述了该系统中最重要也是复用率最高的两类组通用性组件即日志输出组件和数据库操作组件的设计与实现。
参考文献:
[1]杨芙清,梅宏,吕建,金芝 浅论软件技术发展.电子学报.2002.30(12A):1901-1906.
[2]杨芙清,软件复用及相关技术.计算机科学 1999.26(5)1-4.
[3]王千祥,应用服务器原理与实现.电子工业出版社.2003年.
[4]冯汉平、何踊跃、吴琢琼,通用数据库操作模块的设计与实现.计算机工程 1999年第10期.
[5]肖文、尹建伟、陈刚、董金祥,基于J2EE的日志管理中间件的设计和实现.计算机应用研究.2004年第10期.
作者简介:
徐义晗,男,汉族,安徽安庆人,讲师,主要研究方向:软件复用,软件构件技术。