从表单抽象到表单中台

相信前端开发的同学,对表单其实并不陌生,而且时至今日,表单应用的编写因为React、Vue等框架的出现,也变得更加地便捷了。在前端工作中,有着很多中后台应用-表单的开发工作量,笔者自己深陷其中,所以为了让头发别掉得太快,重新去理解了表单这个东西,从而重新去思考和设计表单的开发模式,提升效率。

理解表单

其实大家都知道表单是什么,但大多数人对它应该没有一个明确地认识,至少我之前是没有的。

基础表单

<!-- https://developer.mozilla.org/zh-CN/docs/Learn/HTML/Forms/Your_first_HTML_form -->
<form action="/my-handling-form-page" method="post"><div><label for="name">Name:</label><input type="text" id="name" /></div><div><label for="mail">E-mail:</label><input type="email" id="mail" /></div><div><label for="msg">Message:</label><textarea id="msg"></textarea></div><div class="button"><button type="submit">Send your message</button></div>
</form>

这段代码完成了一个最为基础的表单,我们来分析下,它都有什么?

  • 提交地址、提交方法
  • 提示信息
  • 输入框
  • 提交按钮
    然后今时今日,这样简单的表单其实并不再能满足越发复杂的应用需求了。

更丰富的表单

在有了JQ、React、Vue等等之后,网络和社区上有了更为丰富的表单组件,比如日期选择、时间选择器、图片裁剪上传等等。

//https://codepen.io/pen/?&editable=true&editors=001
const { TimePicker } = antd;function onChange(time, timeString) {console.log(time, timeString);
}ReactDOM.render(<TimePicker onChange={onChange} defaultOpenValue={moment('00:00:00', 'HH:mm:ss')} />,mountNode
);

定义表单

可不管怎么变化,提交地址和提交方法提示信息用户输入提交按钮,这些都是不可或缺的,于是我尝试用简练的语言来抽象一下表单是个什么东西:

表单是一个将人机交互行为转换为数据后提交给服务器的可视化前端应用。

想要理解表单,这两个词就尤为关键:

  • 人机交互行为
  • 转换为数据

人机交互行为

为什么不是表单组件(输入框、上传文件、选择框等等),而是人机交互行为?因为在表单应用的开发中,会有更多地用户对数据进行输入场景,而基本的表单组件只是其中的一类行为而已,如果哪天我们的表单里面,需要用户在一个画板上画圈圈呢?

转换为数据

我们最终与服务器进行传递的东西,不过是一份数据而已,而表单很重要的一个作用,就是将人机交互的行为转换为计算机能够存储的数据,然后与接收方进行通信。

所以,表单是这样的:

高级模式-动态表单

聪明的开发者当然不想每天都重复地写着类似的代码,动态表单也是因此而生的吧。

动态表单,说白了就是只需要通过一份配置,就能生产一个表单应用。它能够极大地提升我们的效率,组件的复用率等等。开发者从写代码到了写配置。

就算没有对表单进行明确的理解,动态表单的组件、框架或者库类,其实都已经存在着很长的一段时间了。但它却还是存在着一些问题:

  • 有学习配置的成本
  • 有开发和维护配置的成本

为了解决它的问题,于是笔者基于动态表单,设计了一个表单中台。

表单中台的设计

表单中台是通过对表单进行了抽象,然后单独针对网站应用上的所有表单而设计的。

它是对一个网站应用上面的所有表单,从前端开发者对表单相关的开发维护到用户提交数据到服务端,这样一个完整链路的抽象封装。

表单配置的可视化生产

表单的配置化其实就是将表单开发的逻辑,转化成为了一种结构,在前端看来,它是个JSON或者是个对象。手动编写表单配置是可以被可视化的工具所替代的,这样,表单的开发和维护就变得更加清晰、简便了,效率也会得到提升。

一份配置对应着一个表单的时候,但我们在一个网站应用(业务)上有多种场景需要多个表单,这时候就会有多份配置,多份配置会就需要对齐进行管理,甚至需要动态化异步加载配置。我把配置相关的事情,也一并列入表单中台的设计之中,让链路更加地完整。

说到这里,有些人可能会联想到一些问卷调查的网站、应用。本质上,它们是一样的,但问卷调查应用与大家复杂地表单开发工作还是会有很大的不一样,所以当有表单需求来了的时候,你不会告诉你的业务方说,"你去建立个问卷调查就好啦”。而它与问卷调查系统不一样的地方就是一个商业系统与中台系统的区别。所谓的中台,就是用来驱动和支撑商业系统的。

而实现可视化的手段,就是通过表单来生产配置,然后渲染表单。

可视化生产表单配置的页面:

表单中台

表单中台是一个可以完全由前端驱动的产品,因为表单里面跟数据存储查询是可以相对对立的部分,不管数据跟哪个服务器进行通信,都是不需要关心的,标准应该有前端进行制定。这样,它就是一个去中心化的产品,同时也具备成为一个中台的可能。因为它是一个中台,所以它也是能够支撑和驱动各种N个中后台和业务发展的。

架构设计

通信层与服务器

通信层磨平了与服务器进行通信的过程,这其中包括了配置的增删改查,表单数据的读写。接口标准由前端进行了定义。

例如配置查询的接口:

参数类型是否必须说明formIdLong否表单IDtypeLong是0表示根据userId获取用户的配置列表,1表示根据formId获取某个具体配置

核心层

通过之前对表单的抽象,就可以抽象出一些表单相关的JS类,这个些类本质上其实都是一些数据相关的操作,包括但不限于:

  • 表单数据验证
  • 表单数据读写
  • 表单元素的基本属性
/*** 定义一些标准的表单属性*  - defaultValue*  - key*  - dataSource*  - disabled*  - size*  - title/labelText* * 方法:*  - onChange*  - setValue*  - verify* @param {Object} config */initFormProps(config){let onChange = (value) => {this.setValue(value)this.formChange(this.key,value)}let getValue = () => {return this._value}return {onChange,getValue,size: this.config.size,dataSource: this.dataSource || [],disabled: this.disabled,defaultValue: this.defaultValue,value: this._value,key: this.key,block: this.config.block === "true" || this.config.block === "true",title: this.title || this.labelText,labelText: this.labelText || this.title,_type: this.type}}

有了这些,就可以在渲染层,进行多框架的渲染对接了。

业务层

在输出的时候,同时输出了渲染组件和配置生产组件,配置的生产组件可以不进行上线,只要对接业务接口即可;渲染组件自动拉取对应场景的表单配置进行渲染。

所以,只要一次的接入,后续的表单开发工作,就是三步:

1.(未有满足的表单组件时)开发自定义的表单组件
2. 在配置生产组件创建表单
3. 在对应场景接入渲染组件

总结

开发者的开发历程通常会有四个阶段:写代码、写配置、可视化生产、中台。特别是在中后台的应用场景中,这样路径似乎都是有效的。

本文只是说到了表单的中台,其实,这个思路是可以被复制的,

从表单页面的可视化,到表格页面的可视化,再到中后台站点的可视化,路径与架构设计都会大致相同。因此,为了解放生产力,还有很长的路要走。


关注我们的公众号FE One,会不定期分享JS函数式编程、深入Reaction、Rxjs、工程化、WebGL、中后台构建等前端知识

abap mm后台表_【中后台应用】从表单抽象到表单中台相关推荐

  1. 题目管理后台系统_中后台产品最爱的后台:CMS(社区)管理系统搭建

    我遇见的大多中后台产品其实工作都会因为业务的原因,过于枯燥.深耕业务.拆解环节难点,是每天每周主要聚焦的地方. 系统有没有跑通业务流程.系统还有哪些待完善点,几乎充满了中后台产品经理的工作调研. 我在 ...

  2. elementui中tabs切换item中的内容会变_中后台UX优化之道

    前言 "前台重体验,后台重逻辑",B端谈 UX 有没有价值? 一切电子化的今天,运营.审核.电销.账务--无数岗位依赖中后台系统来完成他们的日常工作,好的 UX 确实可以直接为这些 ...

  3. mac地址厂商对应表_网络工程师一分钟搞懂MAC地址表知识点全部内容,建议收藏...

    MAC(Media Access Control, 介质访问控制)地址是识别LAN节点的标识.网卡的物理地址通常是由网卡生产厂家烧入网卡的EPROM,它存储的是传输数据时真正赖以标识发出数据的电脑和接 ...

  4. excel 宏 数据透视表_宏从多个文件创建Excel数据透视表

    excel 宏 数据透视表 If you want to create a pivot table from data on different worksheets, you can use a M ...

  5. 创建交叉表_质性数据分析软件NVivo教程:交叉表查询

    交叉表查询提供了一种快速的方法来检查案例和人口统计变量之间的编码分布.例如,您可以使用交叉表查询来: 检查受访者回答某特定主题或问题的频率. 比较不同人口群体对主题的看法. 在运行交叉表查询之前,您需 ...

  6. 二叉树 跳表_漫谈 LevelDB 数据结构(一):跳表(Skip List)

    早对 LevelDB 有所耳闻,这次心血来潮结合一些资料粗略过了遍代码,果然名不虚传--绝对是不世出的工艺品!如果你对存储感兴趣.如果你想优雅使用C++.如果你想学习如何架构项目,都推荐来观摩一下.谷 ...

  7. 多对多关系需要建立中间表_【数据库基础】为什么需要三张表之多对多表结构设计...

    了解完一对一和一对多表结构设计,接下来一起了解一下多对多的表结构设计. 同样,咱们先来想一般什么场景需要用到多对多.假如说咱们有一个叫订单和一个叫商品的这两张表,这两张表的关系,它其实就是一个多对多的 ...

  8. mysql商品表_(三)购物商城数据库设计-商品表DDL(Mysql)

    大家好,之前我们设计了购物商城的商品表结构(原文链接),现在我们来具体实现表的DDL.对于建表规范,可以参考本系列第一篇文章:前期准备 下载地址: 前往下载 新建一个数据库,名字叫 mall ,基字符 ...

  9. mysql 商品规格表_完成后台管理系统功能(九)商品规格列表的展示,添加以及删除...

    商品规格的实现图: 规律: 1.同一类商品的规格项分组相同. 2.同一类商品的规格项目是相同的.规格项目是跟商品关联. 3.不同商品规格参数的值是不同的 1 页面效果展示: 2.规格列表的展示功能 用 ...

最新文章

  1. Quartz.NET基础知识概述
  2. Android中的基础控件CheckBox、RadioButton、ToggleButton、SeekBar
  3. day10 Pyhton学习
  4. mysql test数据库_mysql数据库test
  5. 多表连接的三种方式 HASH MERGE NESTED
  6. hdu 变形课 1181 这道题数据真实若爆了
  7. SpringBoot(十六)_springboot整合JasperReport6.6.0
  8. Python:bs4的使用
  9. java 远程视频监控系统_基于JAVA的远程屏幕监控系统
  10. 邮递员问题java实现_中国邮递员问题算法.PPT
  11. 计算机网络五层结构要点以及功能,试述五层协议的网络体系结构的要点,包括各层的主要功能...
  12. #GeekPoint# 苹果的 AR 眼镜
  13. 算法艺术(一):Hello world
  14. Fedora和Red Hat Enterprise Linux实用指南(第6版)(上、下册)( 入行必读的Linux圣经)...
  15. mysql时间读不了了_Mysql之复习
  16. Kafka ISR机制
  17. idea无法找到SDK
  18. 大数据分析在病毒疫苗研究中的应用
  19. Python里的@如何使用
  20. android textview 复制粘贴,android app 内 实现文本复制粘贴功能

热门文章

  1. 【Java案例】-Jedis操作redis教程
  2. html css双色径向渐变,CSS 径向渐变
  3. eclipse关闭java程序_如何为Java代码的某些部分关闭Eclipse代码格式化程序?
  4. 沈抚新区机器人产业园怎么_“智慧物流智能AGV技术交流峰会”在长春中日智能制造产业园成功举办...
  5. git 如何取消add操作
  6. Java中在一个字符串的固定位置插入字符串
  7. 省市区联动三级下拉列表实现
  8. python从标准输入读取数据_在PYTHON中如何从标准输入读取内容stdin
  9. ESP32-S3芯片与ESP32及ESP32-S2比较好在哪里呢?官方到目前还没有任何信息发布,我们先来猜看都会有哪些性能的提升
  10. android o preview 3,Android O Preview 之 通知渠道(Notification Channels)