两只小蚂蚁

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

在toB业务场景中,中台或云平台都会大量存在表单填写,那么低代码、可配置表单就是一个必不可少的基础能力。

动态表单

动态表单或者说json表单,一般需要具备下列能力:

  • 动态字段

    最基础能力,既通过配置指定字段的属性,包括:输入类型,标签,placeholder,静态验证规则等等,如

    {
      key: 'name',
    	type: 'input',
      placehoder: '请输入姓名',
      label: '姓名'
      ...
    }
    
  • 动态数据源

    如下拉选择框的选择项,除开支持静态配置以外,大多数情况下应该是允许可实时配置的,那么相应的,需要有配套的前端动态配置平台来支持,这一点在MFE数据层会讲到。如下,其中REMOTE:GLOBAL_CITY是配置平台中所有系统统一的城市列表

    {
      key: 'city',
      type: 'select',
      label: '城市',
      options: 'REMOTE:GLOBAL_CITY'
    }
    
  • 动态验证

    字段验证包括必填验证和格式验证两方面,其中必填验证需要支持配置型逻辑运算和定制型逻辑运算;其中格式验证需要支持静态正则配置和配置平台动态,如下,其中当name字段为张三时,年龄必填,然后年龄正则从远端获取GLOBAL_MAX_100

    {
      key: 'age',
      type: 'input',
      label: '年龄',
      valdation:[
      	{
      		type: 'required'
      		when: ['name','eq','张三']
    		},
    		{
          type: 'validate'
          rules: 'REMOTE:GLOBAL_MAX_100'
        }
      ]
    }
    
  • 字段联动

    字段间的联动关系,如省市县3级联动字段,根据依赖的字段进行展示、隐藏,或者说改变当前字段类型,这些都需要支持静态配置,动态配置在这里由于逻辑不可控,应由变更响应来实现。

  • 变更响应

    变更响应与字段联动是不一样的,变更响应系统是由表单的改变触发,通过事件系统通知到业务处理层,在业务处理层处理完成后决定是否更改表单系统的数据源和配置源,如果有更改,动态表单系统应就更改部分进行响应,这个听起来很熟悉的东西就是下面会说到的规则引擎。

  • 扩展接口

    表单的字段类型不够用了咋办,当然,谁都不能说满足所有场景,所以扩展性需要考虑。需要开放表单字段组件注册功能到业务层,当基础字段类型不满足业务需求的时候,由业务层来实现。还有一种叫法是widget。

当然,上面没有列举出所有的方面,只包括一些核心的概念。

规则引擎

引用百度百科的定义:规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。

上面的变更响应就需要使用到规则引擎系统来实现,按照定义可以知道,规则引擎负责将业务决策进行抽离,并应该支持通过DSL(Domain Specified Language)和编程的方式进行业务决策。

规则引擎在后端来说并不是新鲜的名词,如最出名的Drools,当然还有很多其他的规则引擎。在大前端来说,规则引擎就不是一个很广泛熟知的东西了。

规则引擎对前端的意义是什么?

如果没有前端规则引擎,通常是由后端实现规则引擎,前端调用。这种场景下每一次的表单变更,都需要调用一次后端,由后端规则引擎跑出结果再返回给前端,由前端来展现变更。该模式流量负担很大,响应不及时,UE非常不好。

随着客户接入端计算力的提升,规则引擎前置就有了可能性和必要性。其中nools是纯js实现的多端兼容实现。

前端接入规则引擎负责什么?

主要负责变更响应,表单的变更将触发规则引擎的运算,而业务层的抽离可以通过DSL存储在远端,或者在开发模式下由业务层负责。运算结果将响应到表单数据上,再通过数据来刷新视图。

RETE算法

RETE算法是大部分规则引擎的底层算法。

在说RETE算法之前,对于普通的业务场景来说,一个简单的推理引擎其实已经够用了。该推理引擎可以由二维有向图来实现(我们现在就是这样做的),毕竟不像完全无代码平台需要支持全场景,普通业务场景在推理引擎不满足的复杂情况,完全可以由业务层来处理逻辑。

关于RETE算法和一些基于RETE算法的改进算法,这里就不展开了,感兴趣的可以看看这篇文章How the Rete Algorithm Works

开源表单

大家都喜欢现成的,那有没有开源的优秀动态表单呢?

  • react-jsonschema-form

    react系的配置表单,git上10k+star的项目,上手很简单,支持antd、Material UI等多种风格库。

  • x-render

    阿里系出品,支持JSON配置化表单系统,面向开发向

  • formilyjs

    也是阿里系出品,支持低代码和无代码,有在线拖拽表单设计平台

平台化

动态表单这个东西进行积累再平台化,能想到的目标类似产物有微软的SharePoint。表单的低代码、无代码配置化,表单数据存储的无代码化,再加上权限控制,前端+后端工作流引擎。可以形成toB业务的平台生态组件之一。

posted on 2021-12-27 18:42  两只小蚂蚁  阅读(93)  评论(0编辑  收藏  举报