基于云端的面向构件开发的企业软件架构

2018-06-13 06:52李正权
现代计算机 2018年14期
关键词:云端代码构件

李正权

(广东省科技基础条件平台中心,广州 510033)

0 引言

随着互联网的兴起,人们对软件应用、企业应用的不再是片面和简单的认识;因此现今企业应用大部分都是复杂多变的,并且还带有各种不同企业文化的个性化要求,例如OA、CRM、ERP等,虽然网上很多通用型产品,但很大的场景还是针对不同的企业进行个性化的定制,那么如何更有效地应对市场上这类需求,正是现在所提出的云端面向构件开发(以下简称云构件)的模式所解决的问题。

1 基本开发流程

图1为云构件平台的开发流程;与传统的开发模式相似,以传统的软件定制模式为切入点,使用数据库驱动为主,但它并不依赖如Eclipse、IDEA这样开发工具,它的载体是浏览器;它是具备面向构件模式(具有高可重用性的特性)和云端部署(有效地体现共享模式和实时发布)。

2 具体方案设计

2.1 面向构件开发

(1)构件的实现

构件是整个架构的主要部分,是一种把代码包装成一个个粒度极少的组件,每个组件会完成一个微少的功能,不同组件的组合,就可以完成一个完整的业务功能,然后又可以被重新使用,转化为一个更大粒度的组件;因此它具有高的可重用性;构件主要有三种表现形式,分别是预编译的构件、动态编译的构件,还有两者混合组成的构件。

图1 开发流程图示

①预编译的构件

就是指预先编译好的代码(下面以Java为例,编译后会产生class文件),其本质上是一个函数,有标准的入口和出口参数,如下代码:

这是一个简单Java函数,功能是把两个字符串合成一个字符串;象这类函数,我们编译好class文件后,传统的开发模式是放到开发环意下就能直接使用;

但在云模式中,我们要像在开发环境一样地使用它,就得先让使用者知道它放在哪里和怎么使用,因此需要预先登记这个函数的信息,并保存进容器中(如数据库),如图2。

图2 构件发布

被成功登记并发布后就会形成我们所说的构件;通过上述的配置,使用者就能够通过代码(上图中为join)在云端找到这个函数,并在自已的设计业务中使用,而云端也能够获取使用这个构件的方法,并且可以利用Java反射机制设置它的入参,执行它,得到回参。

②动态编译的构件

预编译的构件存在一定的限制,依赖用户开发环境进行编译,最后打包到平台上才能使用,严格来说,这种方式还不是真正的云端开发所使用的模式,这种构件比较适合一些不经常修改的功能,例如邮件发送、短信发送、数据表的增删改等操作;但实际使用中有很大一部分是需要灵活编写的,这种代码需要实时进行修改并实时发布使用,例如查询条件、变量设置等;这时候我们需要一个能支撑代码动态执行的环境,使用脚本引擎是一个不错的选择,例如Java8自带的Java-Script,使用Java编写的Groovy,还有Python等也是一个很好的选择;如图3。

图3 构件发布

同样地,我们需要保存这些代码进容器中(如数据库),并通过代码(上图中为join)在云端找到这个函数并使用,而云端也能够获取使用这个构件的代码体,并选择适当的引擎执行它。

③两者混合组成的构件

两者指的是预编译的构件和动态编译的构件,云平台中为了资源更合理的利用,应该允许不同类型的构件重新再组合使用,该类构件是一种对现成的和历史资源再利用的一种重要表现,软件企业中经历了一段时间后,由于各种原因会留下很多历史可用资源,这些资源可能是某个功能包、一些函数等;而该类资源还是具有很大的应用价值,利用构件对该类应用进行重新包装,形成构件,不但可以再利用现有的资源,而且可以把资源更抽象化,形成通用形组件,例如:邮件发送、短信发送等;如图4是一个短信发送的通用构件:

图4 短信发送构件

它的使用过程跟上述两种构件类似,也有唯一的代码,并能通过云端查找和运行。

(2)性能优化

通过第一点对构件的实现描述不难发现,构件基本上运作在反射机制和动态编译的环境下,这会给运行环境带来极大的资源损耗,使性能是急速下降;为此我们需要为云构件平台考虑缓存机制。

①类缓存

由于使用Java反射机制,相比正常的类调用,性能会下降很多,例如当Class会被调用时会用Class.for⁃Name进行加载,而Class.forName方法的调用会执行Class类文件在整个类路径下的搜索,频繁调用比较影响性能,同样地还有对方法的执行等,那么这类操作,我们需要使用缓存机制、静态集合或者缓存中间件en⁃cache等都是一个不错的选择;如下代码片段:

图5 类缓存

②脚本缓存

脚本指的是由动态编译的构件保存的代码,这类代码相比反身机制更损耗资源和性能,预编译的构件,至少类是已经存在的,但动态构件它的类是在云端被使用时才进行实时的编译,因此同样需要缓存;以Groovy为例,其主要缓存目标是已编译好的脚本对象Script。

(3)软件结构与模板

构件是一个单独的微业务单元,他们的互相组合会产生新的业务,就好象堆积木一样,然后一个或者多个构件形成软件所需要的功能模块,不同功能模块的组合就是我们所说的应用软件;优化处理后的软件形成一个通用性极高的模板,可以针对未来相似的应用再进行复制和二次开发重用,以下是软件的组成结构图:

图6 软件组成图示

不难看出,通过一定时间的沉淀,不同的应用模板最终会组成企业所中心应用库;再开发类似的项目时,就可以在中心库中提出相似度高的模板进行二次开发,成本会大幅下降。

2.2 云端部署与资源共享

(1)云端开发与部署

云端是一个很好的软件聚合平台,它能提供一系列的强大的服务,包括代码的编译、版本的管理、模块功能的导出、安装、部署、以及软件授权与发布等;在云端上进行开发,我们不需要额外安装第三方的开发环境,只需要准备一个浏览器就可以进入开发工作。

云端上的应用开发一般是实时进行的,基于SaaS的即见即所得的应用服务,而这些应用中包含构件、业务模块、UI界面等;被开发出来的应用,经过云端平台提供的授权配置,可以供应给第三方使用。

同时,云端上除了能支持多租户方式外,还支持个性定制和使用模式,软件模块能单独被导出到另外一个云端应用服务器上使用,并且安装过程简单,安装后的软件能进行二次定制开发

图7 生成安装包图示

(2)资源共享

过去的开发应用中,资源之间并未能很好地分享,各种资源相当于一个单独的孤岛;云端的出现,解决了这种资源被发现和共享使用的问题,在云端中,只要一人开发了某构件,并发布到平台上,其他接入人员就能实时地发现和使用,很好地避免了资源的重复开发带来的人力和时间耗损,如图8。

图8 云端开发图示

2.3 更多的应用价值

在过去项目实施中,往往有这样一种场景,就是开发过程中有新的成员加入,或者某些成员被临时调配其他项目组,新的成员接手,这种情况下接手的人员必须从相关文档和代码中理解当前项目中的逻辑关系,这样会造成一个学习和理解时间上的耗损,而且这个耗损代价并不少;在构件化的平台里面,逻辑性都是以图型的形式表达并加以注释,使得新接手的人员能快速地理解当前业务逻辑,同时由于构件的封装,开发人员也只需要通过相关说明,理解构件的入口参数和出口参数就可以使用,维护的成本会大大减少。

3 未来的应用现状及前景展望

现今市场上不少的软件企业创造了各类不同的开发平台,并为自己的平台定义各种各样的开发模式,但无论开发速度上有多优越,还是存在着各种缺失,例如维护的成本,学习成本,资源的再利用等;云构件模式是一种具有随着资源的增长,开发时间缩短和成本降低的特性,在实际应用中,能更有效地提高熟练开发人员的开发时间,提高其效率;能够有利于新接触的开发人员缩短学习的时间,快速进入正作状态。

随着AI人工智能技术的兴起,很多资深的专家开始研究让AI来完成项目代码的编写工作,但是代码随机性和复杂性将会带来很大的问题;而构件模式未来可以利用人工智能的各类算法让机器学习构件的使用,更进一步从现有的库中学习业务逻辑的排列方法,做到让机器识别出各类需求对应的业务功能,并自动完成;相比于代码的实现方式难度将会大大降低。

图9 优化开发过程图示

4 结语

本设计是基于云端的构件开发模型,在利用构件的高可重用性的基础上,配合云端的共享资源模式,使得资源的再利用达到一个更高的阶段,具有随着构件、模块、模板应用的增长,开发周期会大幅缩短、成本会降低;对人员技术要求的也会将随之而降低。

[1](美)Vaughn Vernon(沃恩·弗农).企业应用架构模式.滕云译.电子工业出版社,2014-03-01.

[2](美)Eric Evans.实现领域驱动设计.赵俐,盛海艳,刘霞译.人民邮电出版社,2016-06-01.

猜你喜欢
云端代码构件
钢筋混凝土构件裂缝控制
四海心连·云端汇聚
在云端永生
云端之城
神秘的代码
基于构件的软件工程技术与理论方法探讨
一周机构净增(减)仓股前20名
一行代码玩完19亿元卫星
近期连续上涨7天以上的股
在云端