鉴于整体框架仍采用MVC的三层开发模式,动态通用模块的实现也脱离不开MVC的基本要求。
一、动态的通用登录模块设计
第一步:建立模块包结构,采用通用的mvc框架包结构设计。
第二步:创建基础数据库,鉴于微服务体系的分布式解决思路,当前数据库单独成库。
create database login;
use login;
其中主要需要设计1张表即可,但该表与其他表有关联,暂时将有关联的4张表同时设计出来。分别包括:
1. user表,是后台管理用户的表。
2. product表,是生产的产品详情表。
3. equipment表,是生产设备的详情表。
4. account表,账户表是用于权限管理的表,确定分配当前用户可以观看到那些配套属于自己的信息。
5. id关联表,主要是user、account、product、equipment的外键关联表。
由于数据库设计是最基础的也是关系到通用模块是否可拓展、可自定义使用的关键,因而需要对所有可拓展内容进行分析,对相关元素代理化处理,如设备包括型号、编号、名称、健康状况等硬指标,还包括指标A、指标B、指标n等软性可拓展指标,而多余的指标放在数据库又可能造成当前系统暂不需要使用,而出现数据冗余,大量的数据库资源被占用,因而如何合理地确定指标冗余数量,自可拓展、自适应的方法还需要进一步探索和优化。
鉴于时间和自身精力所限,暂简单设立user表:
CREATE TABLE ‘user’(
‘id’ int(11) NOT NULL AUTO_INCREMENT,
‘username’ VARCHAR(20) DEFAULT NULL,
‘password’ VARCHAR(20) DEFAULT NULL,
PRIMARY KEY ‘id’);
第三步:前端界面实现。
Login的前端主要3个界面,1是login的登录界面,2是登录成功的管理界面,3是无账户的注册页面。
功能比较常见,具有广泛的通用代表性。
第四步:后端接口标准化。
前端暂时采用JSP页面技术,后端要访问前端JSP页面,主要还是通过servlet的request和response的方法实现请求的接收和回应,页面的跳转和定向可以选用dispatch和forword方法实现。鉴于servlet使用的复杂性,这里建议使用从c3p0连接池,可以通用化构建完成connection和statement对象。为了实现动态代理技术在后端接口上的通用效能,这里的页面跳转不能静态地直接定义,一般通过两种方法来解决:
1. 通过xml配置相关属性,通过形成dom树文件,解析相关的属性值来获取转向url;
2. 通过proxy代理技术,创建一个代理,不直接对JSP页面进行选择和变更,可以实现更多更新的功能叠加,同时还能不对源码文件产生修改、破坏。
正在试验代理能否自定义化或清单化,即最好能够实现模块与页面数据结构相似,该模块即可与页面直接链接使用。
二、动态的数据展示模块设计
根据模块接口属性,对动态的数据展示模块进行结构设计。
主要还是包括五个层级的接口,其中数据的规范化是数据信息展示的关键之处,因而对规范化数据进行集合封装相对具有更强的通用性。
数据封装通常采用bean封装,但bean封装的数据类型是自定义的,无法实现动态数据的自定义读取,除非在交互界面进行数据类型的选定。
因而产生两个解决方案:
解决方案一:通过交互界面传递数据的规范化标准,主要实现路径为交互界面的选项条对应设定数据类型,设定数据的别称,并预设数据的基础信息。
优点:传输效率更高,资源占用少,便于处理不规范数据;
缺点:人工录入消费的精力大。
解决方案二:所有数据类型全部采用String字符型,后台数据处理中根据数据信息转换为标准数据接口对应的数据类型。
优点:操作相对简单,便于处理规范数据,储存空间占用率下降。
缺点:处理资源占用率大。
鉴于以上的问题,进一步优化方案,采取动态bean封装方式将更有利于协调上述优缺点冲突。动态的bean封装方法主要是基于采用非结构化数据解决方案一封装、结构化数据采取解决方案二封装,由于现有的数据注入类型都是结构化数据,数据的储存空间占用率下降,对于实现多个独立数据库有一定的优化效果。
数据展示模块的实现思路:
第一步:模块的通用规范数据进行封装,比如设备信息数据集、状态监测数据集等;非通用不规范数据的动态封装,比如故障信息诊断结果等。
第二步:创建有关数据集对应的数据交互接口,主要包括前端与核心业务的交互,后端与独立数据库的交互;
第三步:数据信息展示,利用table基本标签,编写动态js代码,实现动态的可拓展的表格展示,利用css对表格样式进行规范化,实现数据表格化展示;利用chart可视化插件,实现数据图表化展示;利用前端数据接口,静态实现其他标准化展示效果。
三、动态的数据分析模块设计
数据分析涉及到算法实现,而算法具有特定性,因而算法的动态植入是模块通用化设计的关键核心。算法植入涉及到数据的输入与输出匹配,而匹配包括数据类型匹配、数据信息匹配、数据数量匹配。数据匹配还涉及到前一个模块设计中提到的规范化标准数据接口的匹配,因而部分代码可实现复用。
算法实现动态植入之后方才能实现相应的数据分析模块的动态复用,上图搭建的算法动态植入模型基本上能够较好解决问题。
数据分析模块的实现思路:
第一步:基础算法封装,对基础算法进行结构化封装,作为默认基础算法库的一部分,可实现动态选用。
第二步:创建算法槽接口,实现动态的算法结构化模型;
第三步:创建算法动态输入输出接口,对数据的格式、样式信息动态插入,对数据的数目、类型、信息进行规范化匹配;
第四步:实现页面算法动态导入接口,代码片段为结构化的String组,或采用matlab算法外部导入jar包方式(该方式可能只适用静态导入,需进一步验证)。