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

· 浏览次数 : 11

小编点评

在软件行业的发展过程中,提高开发效率和产品质量一直是从业者的首要目标。为了实现这一目标,复用软件模块成为了一种有效的手段。本文将以LuBase低代码平台为例,探讨表单引擎在OA和低代码平台中的重要性及其表单控件的扩展性。 表单引擎的组成 表单引擎通常包括表单设计器和表单渲染引擎两部分。表单设计器通过拖拽形式定义表单的样式和交互行为,并将配置信息以JSON形式保存到数据库中。而表单渲染引擎则负责读取数据库中的配置信息,并动态生成表单进行渲染。 表单控件的扩展性 表单控件的扩展性主要取决于表单引擎的能力。以LuBase低代码框架为例,其表单控件类型的设计方式为:定义字段类型和显示类型。字段类型涵盖了常用的文本、数字、时间、下拉等类型,而显示类型则决定了不同的显示效果。这种设计方式有助于确保表单引擎具有良好的扩展性,因为可以在不修改框架的情况下,通过扩展字段类型和显示类型来实现新的需求。 字段类型与数据库映射关系 LuBase表单控件的扩展点主要集中在对显示类型的扩展。例如,一个文本字段可以根据需要显示为文本框、身份证输入框或其他显示类型。字段类型决定了数据库的映射类型和处理逻辑,因此框架实现了常用的字段类型。然而,这种设计也存在一定的弊端,如需扩展数据库控件的存储类型,需修改框架实现。 总之,通过扩展性良好的表单引擎,软件开发者可以提高开发效率,同时保证产品的质量。以LuBase低代码平台为例,其表单控件的扩展性是通过定义字段类型和显示类型来实现的,这种设计方式有助于确保表单引擎具有良好的扩展性,从而满足不断变化的业务需求。

正文

在软件行业的发展过程中,从业者对于开发效率和质量提升是一直在追随的一个目标。通过复用软件模块来实现这些目标通常是一种有效的手段,从头文件引入、面向对象的封装、动态库的引入、代码生成器类工具、低代码引擎等,随着行业技术发展能复用的层次也从底层的文件逐步到界面层面的复用。本文主要围绕在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)

与表单引擎字段类型该如何设计?相似的内容:

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

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

[转帖]阿里规范 - 五、MySQL 数据库 - (一)建表规约 - 8 - 【强制】varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长 度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。

字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。 1、因为mysql 是行存储模式,所以会把整行读取出来。text 储存了大量的数据。读取时,占了大量的io。所以会十分的慢。 2、每行的数据过大 行溢出 InnoDB 会将一些大对象数据存放在数据页之外的 BLOB 页

[转帖]MySQL 8.0.19 instant add column,亿级数据秒速增加字段

一、MySQL DDL 的方法 MySQL 在大型表上的 DDL 会带来耗时较久、负载较高、额外空间占用、MDL、主从同步延时等情况。需要特别引起重视,而MySQL 的 DDL 有很多种方法。 MySQL 本身自带三种方法,分别是:copy、inplace、instant。 copy 算法为最古老的

MySQL高级10-InnoDB引擎存储架构

一、逻辑存储结构 表空间(Tablespace):一个mysql实例,及一个数据库实例,可以对应多个表空间(ibd文件),用于存储记录,索引等数据。 段(Segment):分为数据段(Leaf node segment)、索引段(Non-leaf node segment)、回滚段(Rollback

Clickhouse表引擎之MergeTree

1.概述 在Clickhouse中有多种表引擎,不同的表引擎拥有不同的功能,它直接决定了数据如何读写、是否能够并发读写、是否支持索引、数据是否可备份等等。本篇博客笔者将为大家介绍Clickhouse中的各个表引擎以及其含义。 2.内容 2.1 MergeTree 适用于高负载任务的最通用和功能最强大

Clickhouse表引擎探究-ReplacingMergeTree

作者:耿宏宇 1 表引擎简述 1.1 官方描述 MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中。数据可以以数据片段的形式一个接着一个的快速写入,数据片段在后台按照一定的规则进行合并。相比在插入时不断修改(重写)已存储的数据,这种策略会高效很多。 ReplacingMergeTr

对比分析数仓中行列存的特性

摘要:行存表示了一种数据的存储方式,是最传统的一种存储方式。 本文分享自华为云社区《【玩转PB级数仓GaussDB(DWS)】行列存对比的一些事》,作者:sevenjiang。 行存表示了一种数据的存储方式,是最传统的一种存储方式。对于GaussDB(DWS)来说可以认为其表示存储引擎的基础实现,在

MySQL实战实战系列 07 行锁功过:怎么减少行锁对性能的影响?

在上一篇文章中,我跟你介绍了 MySQL 的全局锁和表级锁,今天我们就来讲讲 MySQL 的行锁。 MySQL 的行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如 MyISAM 引擎就不支持行锁。不支持行锁意味着并发控制只能使用表锁,对于这种引擎的表,同一张表上任何时刻只能有一

[转帖]Mysql向表中循环插入数据

如何查看MySQL的当前存储引擎 看你的mysql现在已提供什么存储引擎: mysql> show engines; 看你的mysql当前默认的存储引擎: mysql> show variables like '%storage_engine%'; 创建表 create table per2 (id

[转帖] MySQL常见的存储引擎InnoDB、MyISAM的区别?

1)事务:MyISAM不支持,InnoDB支持2)锁级别:MyISAM 表级锁,InnoDB 行级锁及外键约束(MySQL表级锁有两种模式:表共享读锁(Table Read Lock)和表独占写锁(Table Write Lock)。什么意思呢,就是说对MyISAM表进行读操作时,它不会阻塞其他用户