




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
硕士学位论文 基于JavaEE的可复用管理信息系统的设计与实现 作者姓名: 刘焕 指导教师: 许舒人 副研究员 软件研究所 学位类别: 工 程 硕 士 学科专业: 软 件 工 程 培养单位: 软件研究所 2014 年 4 月Design and Implementation of Reusable Management Information System Based On JavaEEByDing LiangA Dissertation Submitted toUniversity of Chinese Academy of SciencesIn partial fulfillment of the requirementFor the degree ofMaster of Software EngineeringInstitute of Software Chinese Academy of SciencesApril, 2014独创性声明本人声明所呈交的论文是我个人在导师指导下进行的研究工作及取得的研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确的说明。签名:_ 日期:_关于论文使用授权的说明本人完全了解软件研究所有关保留、使用学位论文的规定,即:软件研究所有权保留送交论文的复印件,允许论文被查阅和借阅;软件研究所可以公布论文的全部或部分内容,可以采用影印、缩印或其它复制手段保存论文。(保密的论文在解密后应遵守此规定)签名:_ 导师签名:_ 日期:_基于JavaEE的可复用管理信息系统的设计与实现摘 要软件复用是一种计算机软件工程方法和理论。上个世纪60年代爆发的“软件危机”使得软件设计人员和开发人员明白,开发、维护过量的软件是极其困难的。当软件规模不断扩大时,对于已经开发的软件的维护和新开发软件的综合成本尤其难以负担。此时,软件复用的思想是解决这一问题的根本方法。可复用软件是指为了复用目的而设计的软件。可重复使用的软件必须满足一致性和不变性。一致性是指软件构件之间和软件系统之间的相似性,它有助于开发复用系统。不变性指的是软件在演化过程中具有的相似性,这种相似性体现在架构上或者设计上。JavaEE作为sun公司为企业级应用推出的Java版应用平台框架,经过十几年的发展,目前已经基本上成为企业级应用最主要的Web应用开发平台,而逐渐演化成Web开发的标准。然而,就算用Java构造一个不复杂的Web应用系统,也需要考虑开发过程中的许多细节,比如界面布局,如何跳转。随着平台应用越来越广泛,使用相同框架开发的不同的管理信息系统具有可复用软件的特点,即一致性。在管理信息系统开发过程中,如果所有功能都需要从头开始建立,往往会浪费人力,延长开发周期。鉴于以上问题,首先,本文在传统的管理信息系统基础上,借助Sitemesh技术,改进框架展现方式,引入框架配置方案,实现可复用管理信息系统的快速原型构造;其次,扩展系统内分类代码的执行逻辑,通过参数化变量的复用方法,动态管理分类代码;最后,采用基于模板的代码自动生成方案,结合模板提取和配置树技术,设计并实现业务代码自动生成算法,并集成到可复用系统里。基于以上设计,本文最终采用广泛使用并遵循MVC开发模式的SSH开发框架,设计并实现了一个可复用的管理信息系统,并集成了常见的管理功能。对该系统的测试表明,开发者可以通过配置来快速构造原型系统,通过自动生成来产生直接使用的功能模块,接入或使用可复用组件。同时,该系统留下了一些模块的接口,具有很高的扩展性。关键词 软件复用,可复用软件,管理信息系统,SSH架构,代码自动生成Design and Implementation of Reusable Management Information System Based On JavaEEAbstractSoftware reuse has become a method or theory of computer software engineering. The software crisis which outbroke 1960s in last century made software designer and developer knowing that it is very difficult to develop and maintain overdose software. Its impossible to burden the cost to develop coming software and maintain developed ones with the continuous expansion of software scale. Software reuse is the basic method to solve these problems.Reusable software is the software which is designed for reuse purpose. Reusable software must meet two qualities: Consistency and Invariance. Consistency means the similarity between software member or software system, its usable for developing reusable software. Invariance means the similarity along the evolution of the software itself, this is generally reflected on its framework or design.JavaEE has become the most popular web application development platform on enterprise level so far as the java version web application development platform which is published by Sun after decades development, and it has gradually evolved as the standard of web development. However, it has a lot to consider the details such as how to jump at the page, how to layout, even to construct a simple web application system. Different management information system developed on same framework has a lot similarities with the widely use of platform. In the process of developing management information system, if all function members have to be developed from the very beginning, it will waste the human resource and delay the development date.In the view of above problems, first, with the Sitemesh technology, this paper has improved the frames display method, introduced the configuration method, realized the rapid prototype structure of the reusable system based on the traditional management information system. Second, it has extended the executable logic of the classification code in the system, managed the classification code dynamically based on the reuse method named parametric variable. At last, with the model-extraction technology and configuration tree technology, it has designed and realized the code auto-generation algorithm, and integrated that into the reusable system, using the code auto-generation method based on model.Based on above design, this paper used the frame SSH which is widely used and followed MVC pattern in JavaEE, designed and implemented a reusable management information system, integrated some common management functions. Plenty of test on this system has indicated that, developer can structure the prototype system via configuration, generated code for direct operation via auto generation, accessed or used the reusable component. Further more, the system has integrated some modulars api for the developer, and that makes the system have strong expansibility.Keyword: Software Reuse, Reusable software, Management Information System, SSH Frame, Code Auto Generation目 录摘 要IABSTRACTIII第一章 绪论11.1 研究背景31.1.1 系统相似点31.1.2 传统管理信息系统缺点51.2 论文主要工作61.3 论文组织7第二章 软件复用综述92.1 软件复用方法92.1.1 Java语言复用技术92.1.2 面向对象的组件复用技术102.1.3 模型驱动的代码自动生成技术112.2 JavaEE 可复用方案152.2.1 快速开发框架152.3 SSH架构简介162.3.1 Struts简介162.3.2 Spring简介172.3.3 Hibernate简介192.4 本章小结19第三章 可复用管理信息系统总体设计213.1 设计思路213.1.1 系统功能分析213.1.2 界面配置方法233.1.3 模板生成方法253.2 系统架构273.2.1 名称管理组件283.2.2 分类代码元元素管理293.3.3 业务代码生成工具303.3.4 业务代码生成过程313.3.5 菜单管理组件333.3.6 其他模块概述343.3 本章小结35第四章 可复用管理信息系统的实现374.1 名称管理组件374.2分类代码元元素管理384.2.1 工具要求和功能384.2.2 实现细节394.2.3 复用思想小结414.3 业务代码生成工具414.3.1 工具要求和功能414.3.2 模板代码片段424.3.3 生成器周边功能434.3.4 配置表444.3.5 生成器464.4 系统管理组件504.4.1 用户-角色-权限504.4.2 文件系统514.4.3 日志系统534.5 菜单管理组件554.6 其他模块简介574.7 本章小结58第五章 实验595.1 系统展示595.2 开发者功能演示615.3 本章小结64第六章 结束语656.1 工作总结656.2 进一步工作65参考文献67发表文章目录69致 谢71第一章 绪论随着信息化时代的到来,软件开发与应用越来越普遍。60年代的软件危机使得越来越多的软件设计人员和开发人员明白,开发、维护过量的软件是困难的1 。在上个世纪70年代的NATO大会上首次提出了软件复用的概念,经过四十多年的发展,软件复用的理念不断被完善,而复用技术也越来越成熟。软件复用可以有很多类型,领域内的软件复用可以提高软件的品质,提高软件开发效率,如图1-1所示2 :图1-1 领域内软件复用的类型从图中可以看出,软件复用包括程序库、设计模式、基于组件的开发、应用框架、遗留系统包、基于服务的系统、应用产品线、垂直配置型应用、程序生成器、面向方面软件开发等。为可复用目的而设计的软件如果可以在现有软件设计时便引入软件复用的思想,使用上述几种复用方式,即可减少开发时间,缩短项目周期。总体来说,使用可复用系统来构建新需求下的软件,它的意义包括:1、能够降低软件开发的综合成本,提高软件开发的效率。用可复用的组件来构造系统还可以提高系统的性能和可靠性,因为可复用组件经过了高度的优化,被专门负责的开发人员进行维护,实现了模块性的分工与合作。2、能够减少系统的维护代价。由于使用了可复用的组件,减少了可能的错误,开发人员只需要维护自己开发的模块,而对于复用的组件模块便不再需要检验。3、软件复用能够提高系统间的互操作性和复用性。通过使用统一的接口和开发可复用软件规范中留下的扩展点,开发的新系统将更为有效地实现与其他系统之间的互连和复用。4、软件复用能够支持快速原型设计和快速开发过程,实现快速迭代和响应,缩短开发周期。利用可复用组件和架构设计可以快速有效地构造出应用程序的原型,以获得用户对系统功能的反馈,以此为循环,进入快速开发和迭代,将会缩短开发周期。5、软件复用还能够减少培训开销。开发者使用软件复用的设计方法来构造系统后,不必为新的系统设计和使用投入过多学习精力,而使用一个可复用组件库来构造系统,其中的组件都是他们所熟悉和精通的,便会减少培训的开销。使用软件复用的思想来构建新的系统确实能够有效的减少开发周期,但在实际运用中,同时也存在以下问题3 :1、 使用者或者开发者必须会使用被复用的对象,并且这些对象是可用的。而开发者使用这些可复用对象或系统是需要学习成本的。2、 需要大量的可复用软件的开发。在以往的传统软件的设计和架构中,并没有为可复用性而设计,要将系统重构为可复用的,需要投入新的开发人力,往往这比从头开始构建一个新的不需要复用的系统付出更多,因而项目开发过程中往往由于时间、人力等因素,或者交付项目为主,而不会采用可复用系统。3、 缺少基于可复用软件的应用系统构造。仅仅凭借实例或者组件库只能为软件复用提供类似于函数库的简单复用,而更高抽象级别的复用需要有理论依据和框架。因而,虽然开发可复用系统在短时间内没有实时的效果,使用可复用系统也会产生额外的学习成本4 ,但是从长远来看,开发可复用系统可以有效的帮助团队提高今后项目开发效率,缩短开发周期,节约重复劳动,使得开发工作更加高效。由于复用系统的可维护性,使得测试和维护更加简单。在可复用系统开发过程中,一方面要尽量使用黑盒并且有明确的接口说明和文档说明,前者的描述使得开发者便于使用,后者的描述确定复用的对象是可用的,另一方面,要在可复用系统中为可复用性扩展留下接口或者扩展点,使得系统具有良好的扩展性。1.1 研究背景农产品供应链管理平台,假币管理信息系统等都是基于Struts2.0 + Spring2.5 + Hibernate3.0(SSH)框架的Web 应用,两个系统具有很大的相似性。前者旨在为农产品供应链会员(包括供应商、经销商,物流公司等)提供相关农产品信息的管理,后者主要提供假币信息的管理功能。两个系统都可以作为管理信息系统的典范进行研究,而找到系统中的相似点,提取公共的功能模块,可以为构建可复用系统提供帮助。构建可复用的管理信息系统以便今后在需要实现新的管理信息系统时,可以直接使用可复用系统实现快速原型构建。1.1.1 系统相似点基于SSH 框架设计的管理信息系统遵循MVC 的开发模式(该技术点在第二章会详细介绍),从横向方向看,系统具有技术性的相似点,从竖直方向看,根据业务逻辑系统具有功能性的相似点。横向方向,依据MVC 的开发模式,上层是View 层界面展示,中层和下层是逻辑跳转。在View层,农产品供应链管理平台的登陆界面和管理界面如图1-2和1-3所示: 图1-2 农产品供应链管理平台登录界面示意图图1-3 农产品供应链管理平台管理界面示意图管理信息系统首先展现一个登录界面,不同用户登录后,根据所属角色来区分不同的权限功能,登录后展现的管理界面是一个匡字型的框架页,左侧根据角色不同展现不同的功能菜单,页面布局的上方是该系统的名称(或者是含有系统名称的背景图片),下方(未在截图中)显示系统的版权声明或者相关的友情网址链接。用户登录到系统后,在当前管理界面的展示页中显示欢迎文字,用户根据具体的需要点击左侧的功能菜单来访问对应的功能。功能页面便会显示在右侧的展示页。所以整个系统的前端页面应该将框架固定,而只留下右侧的展示页面为变化的,从而避免重复传输页面不变的部分导致网页变慢的情况。从竖直方向,系统迁移过程中,管理信息系统具有功能相似性,如管理员的用户管理、系统中的文件接口服务等,管理员登录后管理菜单如图1-4所示:图1-4 农产品供应链管理平台用户管理示意图系统管理里有用户管理,用户管理展现的是一个用户的列表,还有角色管理,权限管理等,在这些功能的首页,通过一个列表来展现相关业务的基本信息,在列表右侧可以添加,通过列表中的项来操作指定条目的修改、删除、查看等操作。管理信息系统从横向和纵向两个角度的相似点如表1-1所示:表1-1 管理信息系统相似点纵向横向用户管理角色管理权限管理文件管理界面登录、菜单控制、框架页、功能首页表、欢迎文字、标题等业务逻辑增加逻辑、删除逻辑、修改逻辑、列表查看、权限展现等数据存储附件存储、日志记录、内容数据库等找到管理信息系统中的相似性,可以为从不可复用的系统转为可复用管理信息系统提供依据。越抽象的相似性提取,普适性越广泛,适用领域也更多,适用场景也更加丰富,但同时易用性也越弱。1.1.2 传统管理信息系统缺点以农产品管理信息系统和反假币系统为例,从横向的MVC视角和竖直方向功能视角来分析,传统的不可复用的管理信息系统有以下缺点:第一,界面、常量、布局等不可配置。每一个管理信息系统的界面都需要从头开始构建,一些页面的公共部分显示需要在每个jsp页面申明,部分固定文字也需要重复书写,如果由于需求变动或者其他原因对相应文字、样式等发生修改,由于不可配置,需要将所有的jsp页面进行修改,重复性的工作既不必要也不符合软件设计的原则。第二,系统管理功能不可以复用。系统管理功能包括(但不限于)用户登录,用户管理,角色权限管理,文件系统管理,以及在业务代码功能中对文件操作、日志记录功能的代码复用。每次新建的管理信息系统,都需要根据该管理信息系统的业务相关来设计对应系统管理模块的表的字段,这个工作是不可忽略的,一般使用工具(如PowerDesigner)可以直接向数据库生成所需要的表,而且便于修改,使系统整体的数据库结构更加利于观察。但是,这些功能的页面、控制逻辑等却需要重新开发。第三,系统内业务分类代码不可以动态变化。在管理信息系统中,需要使用一些与系统业务相关的常量,如币种,农产品类别等。这些分类代码作为系统内其他业务的基础,供其他业务引用,在表格中也表现为作为其他表格的外键。在传统的不可复用的系统里,当系统上线之后,如果要增加一个分类代码类别(不是某个分类代码的值),只能修改代码,增加新的表,这给维护增加了困难。第四,部分相似业务功能代码不可以复用。在完成系统架构之后,需要根据需求和业务需要,向系统中添加相关的业务功能模块。部分业务功能在逻辑上与界面展示上十分相似,只是字段(根据对应的JavaBean不同或者需求不同)不相同,这些完成相似逻辑的业务代码在传统的不可复用的系统中都需要开发者重新开发。由于在团队开发过程中,根据历史经验,往往会在完成一个项目之后,继续开发新的项目,项目之间相关的管理信息系统具有相似性。如果采用传统的开发方法,每次项目从需求分析到最终部署,都需要面对上述的问题。因而,开发一个可复用的管理信息系统,以便在后期项目中使用,直接开发,可以大大提高软件复用效率,节约开发成本。1.2 论文主要工作本文以农产品供应链管理平台和反假币系统为代表,分析传统不可复用管理信息系统的缺点,从不足出发,设计并实现了一个可复用的管理信息系统。论文主要有以下几个方面的工作:1、原型系统框架可配置。将显示界面的可配置文字写成JavaName 常量文件,在页面展现的时候交由界面管理器显示,如系统title,欢迎文字,使得变换系统时只需更换名称文件对应变量的值即可;使用sitemesh技术将管理界面放置在框架页里,嵌入菜单项页面,菜单管理器根据角色权限显示菜单项,实现在不同用户登录状态下动态显示菜单,复用菜单功能;将背景图、样式表等进行分类,编入css 文件,由框架页控制,提供若干种input 框,按钮等版式,以便在需要更换页面风格的时候修改相应的css 类;将每个业务功能的首页展现列表统一用Jmesa 开源框架显示,以便统一管理,需要修改表格的背景色,翻页数量,按钮颜色时候直接修改Jmesa 配置即可。2、分类代码参数化配置。传统分类代码每添加一次就要重新设计对应的表格,生成Javabean ,撰写逻辑代码,设计jsp页面,工作量繁琐之外,还需要对上线的系统进行修改,十分不便。利用参数化配置的方法,将分类代码配置的功能设计成两级动态,建立开发者视角,在开发者视角下对分类代码元元素进行管理,在系统中,使用同一套管理的执行代码,将分类代码元元素作为一个变量传入对应的执行代码中,并且复用管理分类代码的Jsp 页面,使用同一套格式的JavaBean 。采用该种实现方法后,即使在系统运行过程中,也可以实时添加分类代码。3、业务代码自动生成。代码自动生成是系统中最复杂的功能,自动生成的代码兼容现有系统中的逻辑处理方法,遵循SSH 框架的设计方式,会生成Xml 格式的配置文件,Jsp 格式的前端文件和业务处理的Java 文件,以及向权限管理中注册一个新的功能Url。为了方便操作,将生成系统集成到开发者视角下,开发者在该视角下配置生成表,即可在后台生成对应的文件,放在代码目录中的代码分别由逻辑控制器和界面管理器控制,生成完成之后,只需要在角色管理里将生成的Url 分配给管理员,那么系统重启之后,该功能即可上线运转,管理员登录后便可以通过菜单项看到新生成的代码功能,开始使用。4、常见系统管理功能集成。系统管理功能在管理员登录系统后,动态从数据库加载管理员角色对应的功能菜单,其中,系统管理功能作为一级菜单,经过菜单管理项配置直接展现在管理员登录后的菜单项里。可以直接复用的菜单管理项包括用户管理,角色管理,权限管理,文件系统,日志系统等功能。综上所述,本文构建的可复用管理信息系统主要为开发者使用,在开发过程中,缩短开发时间,在系统完成运行之后,除分类代码能动态配置之外,其他功能如果发生改变,仍然需要重新开发。1.3 论文组织后续论文章节按如下方式组织:第二章首先介绍目前主流的软件复用方法,然后分别介绍JavaEE 和SSH 架构的特点,最后概括性地介绍了基于模板的代码自动生成的原理。第三章对界面框架化进行了设计,对参量化设计分类代码形式和代码自动生成提出了设计方法,并引出了相关的技术要点。在此基础上,提出了可复用管理信息系统的整体架构。第四章对相关的设计进行了实现,并且详细介绍了核心功能模块的细节。第五章对系统进行了验证。首先对配置化进行了实验;然后对集成的功能模块都做实验;其次对基于参量化复用方法的分类代码模块进行了实验,确保可以在动态条件下进行管理;最后对代码自动生成进行了实验,确保生成的自动化代码可以运行。第六章对全文工作进行了总结,并对进一步的研究提出了展望。第二章 软件复用综述NASA地球科学数据中心软件复用工作组(下简称WG)与2004年在软件复用相关领域社区和相关人员之间发布了关于促进软件复用技术发展的声明5 ,该声明表示将大力支持NASA软件复用小组人员的沟通,项目合作等。WG工作组预期6 软件复用带来的好处和潜力包括:1、减少系统开发时间和成本,减低系统开发过程中的昂贵冗余和重复2、提升系统的兼容性和鲁棒性3、提升社区参与度,提升开发效率由此可见,软件复用的重要性越来越明显。本章将从软件复用的常用方法入手,首先介绍软件复用的几个层面,并对相关技术进行展开,其次对JavaEE框架下的复用机制进行介绍,最后对自动生成技术进行介绍。2.1 软件复用方法总体来说,构建可复用的JavaEE管理信息系统,解决管理信息系统遇到的若干问题,可以从以下几个方面考虑:一是语言层面,由于系统的开发语言是Java,可以利用Java面向对象的特点,做语言功能性复用;二是组件层面,应用系统在组件的逻辑功能上具有相似性,抽象组件的输入输出,用例和公共的功能,系统的框架,登录页和菜单展现等,实现一个可复用的功能组件;三是系统层面,从业务上来说,同一个应用系统的不同业务模块内部,往往具有相似的模型和逻辑结构,抽象并模型化业务模块,通过自动生成的方式来快速部署业务模块的代码,可以大大缩减开发周期和开发者负担。2.1.1 Java语言复用技术Java语言是面向对象的高级程序语言,面向对象程序设计可以遵循最基础的功能复用,功能复用的含义是,通过特定的方法复用部件、代码、函数、类的实现功能。函数,jdk本身提供一些函数的复用,封装在包java.util.function里7 ,函数将基本的功能封装,执行一段基本的功能代码,向外开发接口供其他模块调用并返回执行结果,其他代码模块可以向函数传递参数,调用函数来实现一段功能,如计算两个数的和,比较大小等。如果这个功能在多处使用到,那么这段代码便实现了复用的目的。继承,Java语言是面向对象的,面向对象的语言允许类从另一个类继承8 ,并且可以使用继承类的方法、变量等,继承使得被继承类的方法和变量被继承类使用,实现了复用的目的。参数化类型,参数化类型指定编译器可以自动定制作用于特定类型上的类,虽然在Java里所有的类型都是继承于基础类Object类的,但是通过定义参数化类型,可以在对象进行类型强制转化的时候,自由吐纳指定的类型,如:ArrayList list = new ArrayList():其中通过一对尖括号来表示定制类型,这样,通过list传递的类型被指定为Shape。在复用技术上,可以通过参数化类型定义不同的功能,通过传递功能代表参数所指定的功能模块或数据域,来调用不同业务模式下的执行代码。Java反射,反射机制涉及两部分的内容9 :元层和基层,元层用于描述类或组件本身,而基层用于定义应用逻辑,使用元对象来实现。反射机制允许程序在运行时改变程序内的结构或者变量,因而可以在程序具体运行并使用到一个特定类的时候,由Java去临时找到对应类的构造函数进行构造,构造其实体对象,对其初始化。在Java平台中,提供了Java.lang.reflect包。在可复用系统中,通过对几个同类略有差异的功能实现几个不同的类(或者同种接口下的不同实现),通过使用反射机制,让系统实现动态加载。Java语言是项目的开发语言,因而其复用思想(虽然已经是Java语言的基础)是构建可复用系统的基础,合理的利用Java语言的特点可以有效的避免冗余代码的存在。2.1.2 面向对象的组件复用技术面向对象的软件复用中,有两个主要方向,一个是组件直接使用,另一个是基于数据驱动的,十分适合Java Web工程,因为Web工程本身就有数据库。组件直接复用要求程序系统必须具有模块化的结构10 ,只有在模块化的结构中,模块内部的修改和局部系统的重构才会不影响系统的总体面貌;系统不依赖于具体的运行环境,这样的系统功能可复用性才可以跨平台。而Java通过jdk编译后的字节码运行,是跨平台的,因此十分适合。最后,如果系统进行数据库操作,那么系统必须建立统一标准的数据界面,这样不会因为数据不同而使用不同的界面,复用性的功能模块不会因界面的差异化而不同。在面向对象的环境中,直接复用的组件方法有两种复用方式,一是类库11 12 ,类库与函数库相似,但二者有区别,包括在继承、封装和派生上都不太一样;另一种是某一特定领域的特定功能,比如微软平台上的Window开发使用的ActiveX标准的Com组件,它使得很多的Window应用可以直接通过Activex组件来实现,比如js使用Activex接口来另存网页,C#和VB来驱动图形显示等功能。另一种是Sun公司为在Java平台上开发的JavaBean组件,bean是一个独立的功能集合,本质上是一个类,但它具有独立的功能描述和完整的变量定义。基于数据驱动的面向对象复用技术依赖数据库的存在13 ,该复用思想的提出比较老,现今主流方法采用其思想,但是随着语言本身技术的发展,有Java反射等机制的出现,和web工程中大量框架的出现,便逐渐淡化。为了本文的完整性还是有必要介绍一下。数据驱动将类的属性、类型、函数名等注入数据库,以此来实现动态类。修改类的属性值只是操纵数据库条目而已,这种复用思想在Java Web工程中得到大量体现,如Hibernate映射机制,该技术会在下一节说明。综上所述,面向对象的复用技术或者是提取可复用的功能,按照面向对象的设计方法,封装功能到指定的类库,并采用合适的方法接入到系统中,或者将数据属性参数编入数据库,在程序运行时候,根据数据库数据的变化来动态显示。思想提出的比较早,现在在系统设计时候也常常采用,在可复用的管理信息系统中,将会有效的采取这些复用方法。2.1.3 模型驱动的代码自动生成技术通过对CSE和SPL两个软件复用社区的复用方法调研发现14 ,在大规模复用社区里使用的复用方法都依赖CASE(Computer Aided Software Engineering,计算机辅助软件工程,下同)工具,只不过不同的社区使用不同的CASE工具。如基于模型驱动的开发方式(Model-driven Development,下简称MDD),和基于模型的体系结构(Model-driven Architecture,下简称MDA)复用方法都是在模型层面的代码自动生成方案。但是前者社区的注重点在提升工具的易用性,却无法为架构整个系统贡献太多,后者强调平台适用性,而这恰恰是SPL社区的优势,所以,了解MDD开发和MDA开发对构建基于模型驱动的代码自动生成有很大的帮助。 MDD技术概览MDD技术旨在通过对业务流程的抽象描述15 ,将业务形式化的描述为一个特定的模型,在该模型下,用特定的模板或者模型代码去拼接,替换不同的变量,最终得到自动代码的过程。MDD生成过程取决于一些因素:首先,MDD必须基于XML,MOF和UML,这几个标准之上会大大将少MDD自定义格式和标准的复杂性;其次,如果不使用标准,而只是根据需要自己创建的话,将会存在风险,这些风险包括不能支持主流的语言、架构等,封闭的系统造成开发出来的代码也不会有太强的适用性。最后,在编译层面,MDD方法操纵的更多的是文本而不是设计,因而对模型的描述文本往往比对系统的整体认识要重要。在MOF和UML基础之上,MDD过程普遍采用的方法是基于Ontological Metamodel Extension for Generative Architectures(简称OMEGA标准,下同)的,该过程是基于Java语言版本的,在使用上似乎更加接近面向对象的设计思想。OMEGA标准流程如图2-1所示16 :图2-1 OMEGA标准流程图将静态的代码模型通过静态代码生成后,作为动态代码的基础类,经过一些动态代码和模式,最后动态的生成目标Java类,这些类就是能够展现业务模式的行为级源码。OMEGA扩展了UML表示的流程图中的可执行部分,而且关注在领域内的“向后兼容”策略。最为有效的是,流程中的代码模型(无论是静态还是动态的)都有一个对应的元元素,元元素是决定采用或不采用这块代码的变量,而这一点在本文构建可复用管理信息系统中,也将会用到,这个元元素的生成是从学习模板过程中导出的。图2-2展示了代码生成的过程:图2-2 OMEGA流程代码生成过程模型代码中的每一片代码块,经过生成器的拼装,都会生成对应的在逻辑代码中有实际业务运行相关的代码模块,虽然部分代码可能通过元元素的控制没有被采用,但是不排除在其他系统里这个模块是有用的。综上所述,MDD生成技术的问题在于程序理解UML文本图的建模意义,生成过程很简单,遵循统一的标准和流程,但同时也是构建可复用管理信息系统的障碍。在本文之前,笔者已发表的论文基于SSH的代码自动生成里,由于不需要采用Web的方式,基于Java SWT平台图形化界面可以识别到本地的JavaBean,因而,可以很轻松的跳过这个障碍,用JavaBean来当作一个原子业务模式,直接读取相关的字段、配置信息。而在Web系统中,集成后的系统,应该采用开发者视角,却不能读取本地的文件,所以稍作修改,静态代码无法读取,部分配置需要开发者自己配置写入,但这并不会有太大的影响,在第三章系统设计里将会讲述。 MDA技术概览MDA技术是MDD技术之上,加入图形化的结果,如经常使用jstudio工具的研究者或学生会使用基于GEF和EMF的开发工具17 (虽然这两种工具并不常用),使用MDA开发技术,通过图形化界面配置业务的增删改查而直接生成对应的代码,但代码并不可以直接执行,只是能有基本的函数和伪代码。以体系结构为中心的软件生成过程目的在于通过自顶向下的方法对系统的组件进行追踪,追踪指的是在体系结构中,模块是可以被记录的,因而在复用过程中,可以很明晰的查找所需要的模块。传统的软件过程建模正如瀑布模式一样18 ,从一步到一步,但它有两个缺点:一方面随着经验的增长能够构建更健壮的模块,但是对于简化模块,却未能付诸实践,这也是在大部分软件过程中,软件和系统越来越大,占用空间越来越多的原因。另一方面,模块追溯在传统过程中根本就没有被用到,被开发的模块沉沦在系统里,谁也不知道去哪里找到这个模块,怎么复用这个模块,想要开发高质量的可复用的软件系统,对模块的追溯就显得更加重要。想要对模块有追溯和记录,面向对象的组件复用有一个组件库的复用方法,正如在2.1.2节里提到的,但是它有以下缺点:一是缺少商业化分析和需求定位,几乎没有对商业组件相容或一致;二是同样缺少错误定位,如果说模块有错误和不完整出现的话,是无法修复的,也很难重新挂到模块相关的记录上,后来的复用者会不停重蹈前面犯下的错误;三是组件之间的关系描述很简陋,想要完全的理解组件模型是否相容是否能一起组合使用,几乎是不可能的。在以体系结构为中心的开发方法中,即MDA技术关注并解决以上问题,他的过程19 如图2-3所示:图2-3 MDA以体系结构为中心的开发方法以系统为中心的MDA技术,自顶向下的设计方法,其中,实现部分在最底层,从中间向两边的商业分析过程提供模型,复用层次从分析级开始,明显复用层次是很高的。最上层是系统结构验证,需要商业模型的支持和导入后,进入商业模型选择;第二层是需求分析,经过需求模型导入后,进入验证和新需求添加的过程,设计上该过程会反馈回左侧的生成过程;第三层是组件设计,已经有的组件可以直接复用,同时组件需要满足设计模型的规则,最后,完成设计的体系架构再去编码实现。中间的追溯过程完整的保存了组件的记录。有效的解决了上述在传统软件过程和组件库里提到的问题。综上所述,MDD技术和MDA技术都是基于模型驱动的,在提取完成模型之后,对模型的追溯记录都是属于锦上添花的工作20 。有效的提取模型,理解业务模式,采用更简单的描述模型的方法,都可以为构建可复用的管理信息系统提供技术方法和帮助。2.2 JavaEE 可复用方案Java EE,Java平台企业版(Java Platform Enterprise Edition),是Sun公司为企业级应用推出的标准平台21 。随着Java技术的发展,JavaEE平台得到了迅速的发展,成为Java语言中最活跃的体系之一。现如今,JavaEE不仅仅是指一种标准平台,它更多的表达着一种软件架构和设计思想.2.2.1 快速开发框架快速开发框架的设计旨在提高JavaEE平台开发的效率,一个典型的示例是采用SSH框架(在2.3节会介绍SSH框架特点和基于该框架的常见复用方法),构建轻量级的架构,强调易用性,以及开发大量的API标准化快速开发框架如图2-4所示22 :图2-4 JavaEE快速开发框架快速开发框架将Struts和Hibernate放在Frame类库之上,并向系统提供模板文件,通过开发向导(实际上有些是接口的说明文件)接入到开发环境中,其中,开发类库遵循分层结构,如图2-5所示:图2-5 JavaEE快速开发框架类库分层结构遵循MVC开发模式,前端展现的Jsp到中间控制层的Action,Model层即从BaseAction 和BaseModel 中继承,这也是类库的核心。从实现角度来说,快速开发框架不过是为传统开发方法提供了一些可以复用的类库,实现难度并不复杂,从实用角度来说,可以当作一个系统常用功能性接口jar包来使用,但是对业务的理解和模型的建立,快速开发框架是无能为力的。2.3 SSH架构简介使用著名的Struts2 + Spring2.5 + hibernate3.0框架来整合Web 应用,可以做到松散耦合,让web 应用功能在职责上可以清晰的划分开来23 :表示层、持久层、业务层和域模块层。SSH架构简图如图2-6所示:图2-6 Struts-Spring-Hibernate架构Struts遵循MVC的设计模式,主要控制逻辑跳转,通过Struts处理器和配置统一调度。中间的Spring通过IOC控制来指定对应的响应在何时加载实例化对应的类。最后的Hibernate层连接数据库,建立映射文件在数据库和JavaBean之间,Service层可以通过DAO来直接操纵数据库进行增删改查的功能。2.3.1 Struts简介Struts 2以WebWork为核心24 ,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。图2-7显示在struts2的工作原理图:图2-7 struts2工作原理图一个发起的http请求被struts2拦截后,在请求转发给Action之前,会有一些必要的工作要执行,如过滤,检查登录Session等。之后,Struts会根据请求传来的数据,依据xml配置文件中的默认配置,将数据进行类型转换,还会对数据进行校验,这些工作都做完之后,会根据Action代理去调用Action(这里如果系统配置了Spring,往往需要Spring去实例化一个类),交给Action执行的结果传回给Struts,Struts根据指定的结果找到对应的页面,当然也会经过一些处理,如果没有特殊任务的话,最后会进行Http响应,完成一次请求。2.3.2 Spring简介Spring是一个开源框架,它是Struts和Hibernate的桥梁,该框架是一个分层结构,由七个定义好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean的方式,如图2-8所示25 :图2-8 Spring框架的7个模块各个模块可以单独使用,也可以联合起来使用,其中:l 核心容器提供 Spring 框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 展会委托搭建合同范本
- 民用住宅购房合同范本
- 社区志愿者安全知识培训课件
- 员工代理业务合同范本
- 社区应急知识培训课件计划
- 物业托管经营合同范本
- 新开发旅游合同范本
- 公司 信托 贷款合同范本
- 技术指导合同范本
- 车辆维修投标合同范本
- GB/T 44059.1-2024医用气体管道系统第1部分:压缩医用气体和真空用管道系统
- JT-T-1240-2019城市公共汽电车车辆专用安全设施技术要求
- 精装修工程施工方案
- (高清版)JTG 6310-2022 收费公路联网收费技术标准
- 耐落集团技术资料
- QC-T 237-2022 汽车驻车制动器性能台架试验方法
- 透明皂的制备实验报告
- 建筑构件防火课件
- 中医诊断学中的舌象与脉象在诊断中的应用
- 社区开展胸痛知识讲座
- 消防工程师销售培训课件
评论
0/150
提交评论