元数据管理
1. 数据库表设计
id 创建时间 更新时间,等通用属性不在此标出;
1.1. 元数据表
uniqueRemark | name | varType | regex | value |
---|---|---|---|---|
唯一标识 | 名字 | 类型(boolean,String等) | 校验规则 | 值,比如固定值、url等 |
1.2. 表单表
formStyle | formJs | formVersion | formName | businessId |
---|---|---|---|---|
表单json,即样式 | 表单js | 用于乐观锁,同时标识表单新旧 | 表单名字 | 业务对象id(索引) |
这里的表单是必须要json的,因为后端要处理其内容。
1.3. 业务对象化表
formId | businessName | descript | businessType | relationId | metaDataId |
---|---|---|---|---|---|
表单id | 业务对象名字 | 描述 | 业务对象类别 | 关联id(索引) | 元数据id集合 |
2. 设计思路
2.1. 完全动态(理想状态)
优点:
全部动态生成,无需任何维护,可作为任何一个系统的基础。
缺点:
- 每更新一次表单,业务对象就换为一个新的,或者替换一个旧的。
- 需要强大的检验规则,来防止出现脏数据。
- 没有相关开发经验。
2.1.1. 以人员为例:
① 前提:在系统启动之初,系统中无任何业务对象,不知道客户的任何需求,添加人员的时候不知道客户想添加什么样的属性;
② 需要为其新建一个业务对象模板,如下图所示:
③ 点击确定,创建成功,现在可以绘制表单,如下图所示:
④ 点击确定,开始绘制表单样式和属性,绘制完毕,点击保存,这时前端将json传入后端,后端从json中取出控件的标识、名字、校验格式、类型等属性,存入元数据表,使用spring-data-jpa的save方法,取出返回值中的id,存为集合放入业务对象表中的metaDataId字段,表单id同理放入formId字段。
⑤ 这时人员的表还没有设计,所以在第四步的最后,应该加上自动创建数据库表,然后表名即为构建出来的表单名字,同时业务对象表中的业务对象类别应该为人员。数据库的字段即为元数据表的唯一标识,对应元数据表的字段类型生成人员表。
⑥ 查询人员的时候,应该通过业务对象查询到表名,然后通过表名列出其数据。
⑦ 搜索框即业务对象关联的元数据id集合取出来的值
2.1.2 以流程为例
① 前提:流程绘制完毕,已经部署;
② 添加业务对象,类别:流程,业务对象名称:选择对应流程,对应的业务对象表中填写相关数据,不需要添加元数据id,添加业务对象完毕;
③ 绘制表单,表单保存完毕,给业务对象绑定表单id;
④ 流程在执行的时候会将控件数据和控件唯一标识放入流程变量表中,无需手动维护数据。
2.2. 静态设计
① 类似于zb系统初期设备拓展属性的设计,在绘制表单的时候在唯一标识那直接通过下拉框选择元数据表的字段信息;
② 直接给人员绑定元数据字段;
③ 或者在人员表字段后面加一个json_encode字段,存放元数据的json格式。
④ 点击下图所示
⑤ 会在数据库中生成表:
⑥ 结构如下图所示
⑦ 数据如下,绑定即可:
⑧ 前端表单绑定即可,生成视图查询。
2.3. 半静半动
① 首先要有人员表的基本属性存在,比如名字、部门等基础属性;
② 在其上面拓展字段,业务对象中绑定表单中拓展出来的字段id;
③ 然后再建一张表里面存储元数据字段、id和值还有业务对象类型,以做采集使用。