ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

MFE支撑层-动态表单

2021-12-27 19:05:56  阅读:216  来源: 互联网

标签:MFE 配置 业务 表单 引擎 规则 动态


在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业务的平台生态组件之一。

标签:MFE,配置,业务,表单,引擎,规则,动态
来源: https://www.cnblogs.com/full-stack-engineer/p/15531454.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有