论基于构件的软件开发

Posted by Kaka Blog on August 21, 2018

摘要

本文通过我参与的某市公共信用信息大数据系统项目为实例,详细说明我作为该项目的项目经理,我是如何基于构件开发技术开发软件项目以及实施过程中碰到的问题和解决的办法。文章首先解释了基于构件的软件开发的基本概念,认为目前大多数开发单位的产品存在重复的功能模块,而重复的工作导致项目周期及开发成本不必要的增加,针对这一问题,提出了应该及时整理已有的系统,形成自己的企业构件库,针对性的选择构件,从而基于构件开发的新的软件项目,在保证软件产品质量的前提下,能有效地缩短项目开发周期和开发成本,最终使企业盈利。

正文

2017年6月,我参与了某市公共信用信息大数据系统项目的开发,项目组成员共34人,在项目中,我担任系统分析员,主要负责系统分析和系统设计方面的工作。项目历时6个月,于2018年1月正式上线,系统至今运行稳定,取得了客户的一致好评。

公共信用信息大数据系统涉及的功能很多,主要包含了两个门户网站、一个门户网后台管理系统CMS,一个政务信用信息服务系统,一个中小微企业融资对应应用系统。该系统基于B/S结构,采用的是微服务架构,政务信用信息服务系统包括6个子系统:政务信用子系统、大数据分析子系统、API管理子系统、联合奖惩子系统、数据汇聚子系统、系统配置子系统。

基于构件的软件开发是一种自底向上的、基于包装好的构件来构造应用系统的方法,软件开发的重点从程序编写转移到了基于已有构件的组装,以更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而减低软件开发的费用。它主要包含构件的检索与提取,理解与评价构件,修改构件,组装构件,应用部署等工作。

目前软件行业的竞争激烈,建设单位更倾向于选择已有成熟案例或有类似项目的承建单位。我认为,大多数软件产品存在重复的功能模块,对于开发方来说,重复的开发工作,直接导致项目周期以及开发成本不必要的增加,如何利用已有的软件项目构造新系统,而不仅仅是将其作为投标的筹码变得越来越重要。针对这一问题,我及时整理了已有的系统,形成企业构件库,从需求开始,我们使用面向对象需求分析技术建立带开发软件系统需求规约,在完成体系结构设计后,并不立即开始详细设计,而是确定哪些部分可由构件组装而成,有效的实施了基于构件的软件开发方法。

形成构件库是基于构件开发软件的前提。我们已实施的项目系统中,抽取一些公共的模块作为单独的组件,封装其内部操作,对外提供一致的调用接口。我们分析发现,用户管理模块是很常见的系统模块,其中包括新建账号、修改账号、重置密码、禁用或启用账号等功能只需要很少的改动就可以复用到新系统中。还有例如文件上传模块、角色权限管理模块、日志模块、登录注册模块、修改密码模块、验证码模块、手机号码或电子邮箱验证模块等都是可复用的构件,对于一些看似不同的模块,例如红黑名单查询、双公示信息事项新增、信用目录公示等,都离不开数据库增、删、改、查四个操作,因此,我们在数据操作层进行了面向接口的整理工作,封装成一个组件,使用的时候只需定义好数据模型,即可实现有关该数据模型的数据库操作。在项目中,我们就复用了这些功能组件和数据库操作组件,极大的避免系统重复性的开发工作。

针对性的选择构件是基于构件的软件开发的关键。通过接口规约以及其他约束条件判断是否能在新系统中复用,首先确定构件的各种属性,如构件接口的功能性特征及非功能性属性等,然后评估构件是否满足系统的需求。构件的选择途径有多种,一是从构件库中提取符合要求的构件,二是从市场上购买现成的构件,三是根据特殊应用需求开发。在本次项目中,我们选择的构件来自第三方和企业构件库。

在项目中,我们采用的是微服务架构,我们用到了第三方组件Eureka,Eureka是一个服务注册和发现模块,是一个高可用的组件。首先需要启动多个服务注册中心,防止当成千上万的服务向它注册时负载过高,然后各个服务提供者注册到服务注册中心,其它服务消费者可以在服务注册中心发现服务提供者,服务与服务的通讯是基于HTTP,使用Feign可以调用服务,这样实现了服务器与服务器间的通讯。例如我们将失信黑名单模块作为一个服务A,联合奖惩模块作为一个服务B,两个服务都注册到服务注册中心,这样彼此都能发现,服务B在执行联合惩戒的时候需要调用服务A,这时服务B就作为服务消费者,服务A是服务提供者。

几乎所有的信息管理系统都包含了登录模块,我们需要考虑是否需要验证码,密码是否需要有安全强度提醒,失败次数过多是否需要暂时锁定用户等等,确定后好这些需求后我们直接从企业构件库中提取相关版本的登录构件,业务层和数据层都不需要修改,只需要修改表示层中的界面布局及样式即可。用户权限是基于角色的访问控制,包括角色管理和权限分配,这些组件都是我们经过长期使用并不断完善的模块,可以直接复用,同样只需要修改表示层即可。

加大对已有构件的管理力度是为今后的构件开发项目做好准备。在每个项目中,我们都或多或少会生成一些新的模块作为构件。在本次项目中,对数据归集子系统,做的就是ETL的工作,即从某一数据源抽取数据,清洗转换,存储到另一数据源的过程,并提供数据统计及系统监控。我们将其中的ETL抽取出来,经过测试之后,按照我们企业的标准进行严格定义,形成相关的文档,作为可复用的构件存储到企业构件库中。对于已修改过的构件,我们会进行版本升级,并对版本进行差异描述,便于以后针对不同的需求选择不同的版本的构件。

通过基于构件的软件开发方法,我们如期地完成了项目,系统至今运行稳定。在项目的实施过程中,我体会最深的是,基于构件的软件开发带来的便利性,同时也使企业构件库的构件不断积累。从通用性的角度看,企业新开发的构件不如经过市场验证的第三方的成熟构件,从行业的角度看,企业开发的构件能够满足其业务领域的大部分开发工作,这正是第三方构件无法做到的。当然,我们也发现了不足之处,随着构件的增加,出现了部分构件有冗余的情况,导致了在构件选择的时候有些困难;另外一点就是员工对构件的理解程度不一致,在构件录入构件库时没能严格按照企业标准进行构件定义。针对这些问题,我们采用定期培训员工的办法,把一些优秀的构件拿出来讲解,使员工对企业构件库有较高程度的理解。