表单是存储和展示特定数据格式的容器:主表、从表、附件、组件四层结构,五种类型对应五种场景。本文梳理表单的定义、分类与挂接方式。
表单是界面吗?是一张数据库表吗?做了十年开发却给不出准确定义的人不在少数。这篇用"车厢与货物"的比喻,把表单的本质、分类和它跟流程的关系一次讲清。
这个问题我问过很多人,包括做了十年的老程序员,得到的答案通常跑不出三种。
第一种:"就是一个页面嘛,上面放几个输入框。"——这是界面,不是表单。第二种:"就是一张数据库表呗,一行一条记录。"——这是存储,也不是表单。第三种最常见:"就是……哎呀,你懂的。"——答不上来了。
这不是刁难人的问题。如果你给不出一个准确的定义,很可能说明一件事:你对这个事物的认知,还没抓到本质。
我们团队有一条不成文的规矩:类名、方法名、变量名必须准确。名字不准,说明分类没想清楚;分类没想清楚,代码就会写成一锅粥。研究一个事物,先从分类开始,逐渐深入本质,然后才可能给出精确的定义。
翻遍了网上关于表单的定义,发现都没说出精髓。我试着给一个:
表单,就是一个用于存储和展示特定数据格式的容器。
这句话里有三个关键词:
用更通俗的话说:表单是车厢,数据是货物。
火车头是动力系统,后面挂着不同的车厢:
表单类型 | 它是什么 | 什么时候用 | 打个比方 |
|---|---|---|---|
经典表单 | 最基础的字段排版 | 日常八成场景:填表、登记、申请 | 普通厢式货车 |
开发者表单 | 用代码自由渲染 | 客户对界面要求高、交互特殊 | 定制改装车厢 |
章节表单 | 按章节结构化存储 | 合同、项目申报,要控章节权限 | 分格货运箱 |
VSTO 表单 | 借 Word / Excel 的能力 | 复杂排版与科学计算 | 油罐车 |
自由表单 | 完全自定义布局 | 打印票据、特殊版式 | 异形挂车 |
货物不同,车厢就不同。硬用卡车拉液体,货也能到,但是体验很差——**选错表单类型,是用户体验崩掉的一半原因。**选型口诀八个字:先用经典,装不下再换车厢。
表单必须依附在应用上才能发挥作用,就像车厢要挂在车头上。挂上去的对象不同,它就变成不同的东西。
挂在流程上,叫流程表单:表单挂在不同节点上,节点走到谁谁才填,随着流程流转实现审批闭环——这像卡车把货送到各个站点。
挂在单据上,叫单据表单:一堆表单构成一个台账,实现数据的增删改查,单据再按需去启动流程——这像仓库里的一排货架。
最重要的一句话:同一个车厢,可以挂在卡车上,也可以挂在火车头上。同一张表单,既能跑流程,也能做台账,区别只在它挂在什么上面。
一张表单的数据从来不是一张平表,而是四层结构:
搞不清楚这四层,表结构一定设计不好。这是很多初级开发者最常踩的坑。
第一,表单不等于一份:一个节点可以挂多张表单,就像车头可以拉多节车厢,这叫多表单节点。
第二,表单和流程是多对多关系:一张表单可以挂在多个节点上,一个节点也可以挂多张表单,绑定关系是独立维护的。
第三,同一张表单在不同节点上权限不同:A 节点可以填,B 节点只读,C 节点部分字段隐藏,这由表单控制方案决定。
记住一句话:表单管"装什么",流程管"谁来看",权限方案管"看到什么程度"。三者分工,别混在一起。
带走三句话:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。