APP下载

基于敏捷开发的企业管理系统模板设计与应用

2020-07-24徐建国万千山

软件导刊 2020年6期
关键词:信息管理系统

徐建国 万千山

摘要:为节约管理系统开发成本、缩短系统开发时间,基于J2EE进行企业管理模板开发。模板前后端分离开发,后端以Spring Boot为核心架构,开启二级缓存;前端采用Vue.js、Element-UI模板引擎框架,使用椭圆曲线加密(ECC)保证数据传输安全,并采用Rcdis为二级缓存,MySQL为持久化数据库,使系统对数据的访问变得高效且灵活,通过Git和Jenkins实现项目的持续集成与部署。实际开发测试结果表明,该模板可直接使用,普遍缩短了开发时间(20-30天),并有效节约了开发成本。模板具备可维护性与可扩展性,使用敏捷开发方式让开发者与甲方能够及时沟通,从而对开发作出及时调整,因此可广泛应用于实际系统开发中。

关键词:敏捷开发;J2EE;信息管理系统;SpringBoot;Jenkins

DOI:10.11907/rjdk.201130 开放科学(资源服务)标识码(OSID):

中图分类号:TP319文献标识码:A 文章编号:1672-7800(2020)006-0171-05

0 引言

随着5C时代的到来,信息交互越来越方便,各类管理软件在中小型企业中的应用也越来越普遍。由于中小型企业提供的开发资金有限,为使系统快速投入使用,节约开发时间与成本,一般采用敏捷开发(ASD)形式进行项目开发。但一方面ASD中的质量需求(QRs)通常容易定义不清,并且由于人们大多关注于快速交付功能,导致该问题难以得到有效解决;另一方面很多中小型企业管理不规范,在需求描述上本身就不甚明确,反复更改需求的情况时有发生,因此有时不得不被迫忽略QRs。有研究表明,忽略QRs会极大地增加软件开发与维护成本。如文献报告称,若在开发早期阶段忽略了与质量相关问题,导致系统质量下降,则需要重新开发整个系统。虽然研究者们已提出一些解决方案,但对于小型开发团队而言,这些解决方案花费的成本都是巨大的。

当前中小型企业管理系统通用性较强,通过工具搭建一个稳定的敏捷开发环境,以及拥有一个适用于中小型企业软件开发的模板,可极大地节省开发时间,对开发者(小型开发团队)及使用者(中小型企业)都有很高的价值。模板使用Spring Boot作为开发框架,相比当前主流的SSME框架,无需繁琐的xml配置。目前通常使用SpringBoot+thymeleaf进行开发,但thymeleaf不利于前后端分离。本文模板前端使用Vue框架与Element-UI桌面端组件库,使用Axios以RESTful(Representational StateTransfer,将请求参数变成请求路径)风格发起异步请求完成数据交互,并返还json数据;通过Git、Jenkins以及远程tomcat服务器实现持续集成、持续部署与持续交互;设置Redis为MySQL的二级缓存,以提高查询效率。

1 需求分析

基于敏捷开发的信息管理系统有以下共同点:

(1)持续集成与持续部署。实现持续集成与持续部署是敏捷开发的基本要求,可让项目快速进入测试阶段,完成测试后可快速交付给客户投入使用。

(2)数据安全与权限管理。数据安全可在公共方法类中实现,而权限管理则可通过设计角色与权限为多对多关系的管理模块完成。

(3)基础编码模块。不同企业具有不同业务流程,但大多数企业都会涉及各类编码和BOM,因此设计一个完整的方案将基础编码模块化,有利于减少开发时间。

(4)消息推送与实时通信。大多数信息管理系统都需实现消息推送或实时通信功能,Ajax轮询虽然能解决该问题,但代码量庞大且不便于复用,因此WebSocket已逐渐成为实现消息推送或实时通信的主流方法。

2 环境搭建与架构设计

2.1 持续集成、持续部署及持续交付

搭建的模板实现了项目的持续集成、持续交付及持续部署。

持续集成通过Git实现,开发者根据功能模块创建不同分支,并在分支上展开工作,每次更新都提交到相应分支,并将开发的内容合并到master分支(主分支)上。若提交上线的分支中出现bug,需要紧急修复,为了不影响正在进行的后续开发工作,可找到已上线的版本分支,在该分支上再新建一个分支B,在B上修复bug后,将其分别合并到线上分支与正在进行后续开发的分支上,从而实现对尚在持续开发过程中线上版本bug的修复。

利用服务器中的ienkins实现持续部署,当每次代码仓库中的master分支发生变化时,都会由webhook通知jenkins将更新的代码下载到服务器上。对于服务器端而言,webhook相当于一个触发器。

部署设计上不整合前后端,将前端部署到Nginx代理服务器上,用户访问代理服务器,前端向后端发送的请求通过Nginx的反向代理传输到后端。采用Nginx反向代理设计方式,为后续可能存在的分布式部署提供了便利。

2.2 分層设计

后端分层设计参照阿里巴巴Java开发分层思想,根据系统自身情况进行一定调整,如图1所示。

具体分层如下:

(1)开放接口层:即Controller层,负责响应Post/Get/Put/Delete等请求,并返还数据。系统模板采用前后端分离开发方式,在Controller层,除进行网关安全控制与流量控制外,对外只暴露接口,具体的业务逻辑转发至Service层进行处理。

(2)业务逻辑层:即Service层,接收Controller层转发的具体业务逻辑并进行处理。

(3)通用处理层:即Manager层,将Service层中可复用的部分下放到该层,如缓存与加密方案、中间件通用处理,以及多个DAO层的组合复用等。

(4)数据持久层:即DAO(Data Access Objects)层,对底层的MySQL、Oracle等进行数据交互。在本系统模板中,主要是对Redis与MySQL进行交互。

2.3 Redis二级缓存

配置文件中开启二级缓存,自定义类实现Mybatis的Cache接口。将所有实体类进行序列化,然后在Mapper中添加自定义cache功能。此后,Redis将SQL+条件+Hash等作为key值,并将查询结果作为value。当请求中的所有参数都与key值中对应项符合时,便会使用Redis中的二级缓存。

3 通用方法与系统安全

3.1 统一返还类与公共方法类

统一返还类与公共方法类(通用处理)放置在通用业务处理层中。在进行前后端分离开发时,统一返还类必不可少。在统一返还类ResultBean中,data、code和msg分别返还数据、状态码和消息,并根据开发过程中的常见问题定义如无权限、登录错误、操作成功、数据库异常和一些已知错误等的状态码等。

在公共方法类中封装的方法通常有时间戳获取、算法加密、字符串生成、文件上传下载方法等。此外,mybatis在执行插入、删除与修改功能时,默认返还操作记录的条数。因此,本文在公共方法类中添加如下代码,以减少大量重复代码。

3.2 权限管理与数据安全

权限管理与数据安全调用Apache Shiro中的方法完成。大多数管理系统的权限模块相似,以实现用户与角色多对多、角色与权限多对多为设计准则。表结构设计如图2所示。

设计中User仅有id和password两个非空字段,后期可根据需求,利用外键关联Staff/Customer等表灵活地对不同用户实施权限管理。

在数据安全设计方面,对普通登录进行验证,以保证信息安全,并采用椭圆曲线加密算法对数据进行加密处理。当前端向后端提交数据时,前端发送的数据通过公钥进行加密,以json字符串形式发送到后端接口,并在后端用私钥进行解密。

对于一些涉密数据,由于Web端代码可视,本文设计如图3所示方案,以保证数据的安全性。

首先,前后端约定好一组密钥对,其中前端保存该密钥对的公钥部分(pb0),后端保存该密钥对的私钥部分(pv0)。它们是由椭圆曲线加密算法生成的一组密钥对,用于加密传输密钥和请求等信息。同时在后端设置一个极短的有效时间t0,用来保证由前端生成的用于加密后端发送的数据随机密钥对有有效期约束。

Stepl:在前端生成随机的密钥对(密钥对包含一个公钥(pbt)和一个私钥(pvt)),同时截取时间戳t,将时间戳一密钥对成对地存人到前端缓存中(考虑到密钥长度,存人localStorage,而非Cookie)。

Step2:对身份信息、时间戳t及前端生成的公钥(pbt),用约定的公钥(pb0)进行加密。

Step3:发送请求,请求中包含已加密的上述信息。

Step4:后端通过约定的私钥(pv0)进行解密,验证身份信息,校验时间是否超过有效期。若未过有效期且身份信息合法,则响应前端请求,并使用由前端传来的公钥(pbt)对将要发送到前端的数据进行加密,同时将z随数据一起发送到前端。

Step5:前端获取数据后,利用时间戳,在localStorage中查询与该时间戳对应的私钥(pvt),对数据进行解密,同时删除localStorage中与之对应的时间戳一密钥对。

3.3 WebSocket实现推送或实时通信

通过浏览器发出WebSocket连线请求,服务器回应,完成握手。只需一次握手,浏览器即与服务器形成快速通道,两者便可进行数据传送,该通讯为“双全工”模式。打开连接后端代码如下:

3.4 基础编码模块

将常见的如岗位、学历、性别、专业、院校、员3-3-号格式、物料编码格式等编码统一录入到一个表(basic_coding)中,在表中添加type字段以区分是哪种编码。

4 项目应用

青岛某保洁公司需要快速开发一个管理系统,用于企业管理以及为员工派发工作任务。根据需求,将系统划分为如下几个模块:

(1)用户(员工)管理模块。除管理员工基本信息外,还包括岗位变动、职务变动、部门变动、请销假记录、工作记录以及员工位置定位几个子模块。

(2)任务模块。主要实现任务信息发布、任务分解、任务分配、任务进展查询4大功能。

(3)车辆管理模块。车辆登记与车辆使用状态记录。

(4)物料管理模块。对于保洁工具和物料统一进行管理,实现物料/工具出入库记录、物料消耗记录、物料/工具供应管理、物料/工具库存管理以及物料/工具损坏/维修记录几大功能。

(5)权限管理模块。要求能自由地为所有用户角色分配权限。

按照以上要求,使用模板在user表中添加外鍵staff_id与员工信息相关联后,按需进行相关开发工作,开发过程比预计的3个月缩短了近1个月时间。

员工管理模块如图4所示(注:图中数据为测试数据,不涉及真实信息)。

5 结语

本文结合常用的信息管理系统,设计并搭建了一个适用于敏捷开发的管理系统开发模板,采用Redis作为MySQL的二级缓存,极大地提高了系统查询效率。模板中的权限管理模块独立、功能完善,而且即插即用,能在系统中设定不同权限、角色,从而使不同人员方便、安全地共享信息,达到既能分散操作,又能集中管理的目的。同时,该模板可扩展性强,配合Flutter可完成移动端开发。经过实际系统开发测试,结果表明,该模板能极大地节省开发时间,但仍存在许多不足。如持续集成完成后缺乏对测试人员的通知,需要测试人员随时跟进版本进行测试;采用前后端分离和Nginx导致前端代码需要先上传后编译(前端源码上传到服务器后,再于服务器上进行编译生成相应的html、JaVaScript和各种静态文件)等,期望在后续开发中有更好的方案解决以上问题。

猜你喜欢

信息管理系统
三维可视化信息管理系统在选煤生产中的应用
信息管理系统在工程项目管理的应用
基于三维TGIS的高速公路综合信息管理系统
SaaS模式下的房地产中介公司信息管理系统
高速公路绿色通道信息管理系统开发与实践