文/明道云销售部顾问 文静
编辑/蒋礼轩
一、引言
在软件开发领域,有这样一类"Think"系的书籍被广大程序员们奉为经典,如:Think in C++、Think in C#、Think in Java,Think Python 等。对于一项新技术的掌握重点是对其核心思想的把控,而大量明道云的项目实践也表明一旦用户(尤其是有研发背景的用户)掌握了明道云的开发思想,往往能更快、更灵活地设计和搭建出适合自己的应用。这让明道云零代码平台真正成为一个降本增效的利器。
因此,我今天也想写一个“Think”系文章来解释一些开发者通常比较关注的问题。希望通过我的解释,大家能换一个视角快速了解产品最核心能力。
图 1 Think in 系列书籍
常规的开发模式需要开发者考虑使用什么底层数据库、如何访问、如何构建前后端分离、微服务等架构(这里指的是基于明道云平台的应用搭建过程,明道平台底层仍然使用了此类技术)。不同于常规开发模式对开发者的要求,明道云的开发者几乎都是“全栈工程师”。因为平台已经将相关的基础能力都做了适当封装。开发者只需要考虑如何选取适当的功能模块,以及如何将其组合起来,用以解决企业的实际问题就可以了。
图 2 淘宝前端团队提出的中途岛(Midway Framework)架构
图 3 某无代码平台生成应用的基本框架
图 4 明道云六大基础能力模块
二、应用部分
1.如何存储并管理数据?
在明道云平台,创建工作表是构建应用的第一步。其类似于我们在数据库中创建了一张数据库表。接下来的工作也是类似的,就是定义表的组成字段。只不过该步骤是通过可视化的方式(拖拉拽)操作,你也不需要单独创建 uuid 字段。每条记录明道云都会自动生成唯一的“记录 ID”。
同时,明道云还具有更多直接面向业务场景的属性,并提供了相应的选项。例如:对于 phone 这个字段,其可以支持号码格式的自动校验;对于 birthday 字段,其可以限定前台可选择的星期和时段,而无需单独在前端做正则判断。
注:由于明道云储存工作表的底层数据库采用的是 MongoDB,所以一般也不用考虑字段的长度限制。单张工作表的行数据目前控制在千万级。
图 5 用 SQL 创建并定义数据表
图 6 明道云可视化表单设计
独立的表格是没有太大意义的。为了构建完整的底层数据结构,你需要建立工作表之间的关联关系,使其支持一对一、一对多、多对多的关系。这类似于你在关系型数据库的设计中要考虑主键、外键。例如:客户(企业)和其联系人就是典型的一对多关系。
图 7 关联数据的定义
到此为止应该是很多人对于零代码产品的第一印象,即:可在线编辑和共享的表单系统。但作为一个零代码全栈工程师,你还会面对更多来自业务的挑战。
2.如何提供千人千面的业务前台?
在上面创建工作表的同时,平台会自动为每个工作表创建一个基本的前台查询视图。
图 8 工作表默认表格视图
而为了更好地适应不同人员对数据的需求,你可以在一张工作表上定义更多不同的视图。这些视图主要可以解决以下问题:
让数据以更适合的“形式”进行展示。目前明道云支持表格、看板、日历、画廊、层级这 5 种形式。其覆盖了大部分的企业级应用场景对数据展示的要求。
在行的维度,明道云可以设置数据的可见范围。例如:你可以轻松定义一个过滤器来限制用户只能查询自己创建并且客户手机号码以“135”开头的列表。在以往的开发中,这可能需要你设计一个能支持动态拼接的 SQL 语句,后面再加个 where 1=1。而类似这样的需求可能在一个产品或项目中不断地在变化,占据了你非常多的精力。
图 9 自定义视图过滤器
在用户视图上,明道云也支持让客户自己进行数据的全局搜索、字段组合、快速筛选和自定义过滤等。
图 10 自定义视图过滤器
在列的维度,你可以控制字段的显示、隐藏和排序等前端效果。这些往往是终端用户感受最为深刻部分,例如:同样的数据,对于不同人员的视图,他们所看到的字段是不一样的。你再结合平台基于 RBAC 原则设计的角色权限系统,还可以实现从应用-工作表-视图-字段等各个颗粒度的权限管理。
图 11 自定义视图字段
图 12 角色和权限配置
3.如何实现灵活且强大的后端逻辑?
软件研发人员通常会通过后端逻辑来做哪些工作呢?抛开具体的业务场景,其核心工作可以概括为这几方面:
- 响应来自前端以及后端其他模块的各种事件;
- 对数据库进行访问和操作(CRUD),封装成对象供后续处理;
- 根据业务需求定义各种处理逻辑;
- 和其他系统进行数据交互;
- 实现一些系统级别的任务调度。
当我们把业务需求抽象为这样的基本模块时,这显然就不是一个“表单系统”可以胜任的了。因此,接下来我们要介绍明道云最具特色的“工作流”引擎。
一个工作流的基本组成要素为:流程触发器 + 若干动作节点 + 动作节点之间的逻辑关系。
工作流的动作节点决定了一个工作流具体可以做哪些事情。不同的动作节点通过合理的逻辑组合起来就可以实现复杂的处理过程。
不要被这个“流”字限制你的想象。代码编程的设计本质也是一个支持各种逻辑判断、嵌套、引用、复用的“流”。明道云的工作流仍然保留了这些逻辑特性,而不是单纯的“可视化业务流引擎”。只是在更高的维度对底层代码所能完成的工作进行了封装,并给你提供了足够的灵活性。
当然,灵活性无法和原生代码相比。因为明道云的产品定位本来就不是用来替代代码编程,而是一种互补。这就如同 Java 程序员不需要考虑如何操作指针一样,因为没必要。
图 13 经典的冒泡排序算法
图 14 一个自动化排课的工作流(部分截图)
4.如何触发一个后端工作流?
工作流的触发器是基于各种事件而产生的。以下是几种典型事件:
数据的变动
当数据新增、更新或删除时,流程可触发。这一特性与通常的数据库系统所支持的触发器机制(TRIGGER)是相同的。还有一些特殊场景,如:Excel 导入和 API 创建记录,这些也可以看作是一种触发工作流的特例。
图 15 在明道云中创建工作表事件触发器
和日期时间相关
定时触发和按照工作表中某个具体时间点来触发。
图 16 在明道云中创建定时循环触发器
和组织/人员相关
人员入/离职时自动触发。
图 17 人员入/离职触发器配置
Webhook 触发
由外部系统请求明道 Webhook 接口触发。
图 18 明道云自动生成 Webhook 接口用于外部调用
自定义按键触发
由用户自行决定触发的时机,以按键的形式呈现。
图 19 通过自定义按键触发工作流
5.工作流能处理哪些问题?
数据的增、删、改、查
在明道云工作流中,你可以定义以下动作节点来实现基本的 CRUD。通过他们之间的组合,你可以实现更为复杂的多表查询、操作。
图 20 工作流可进行的基本数据处理
例如:通过标准 SQL 语句和明道云的可视化方式,你可以实现将姓名为“BERT”的人员年龄更新为 18。其流程如下:
图 21 通过 SQL 更新一条数据
图 22 在明道云中更新数据
需要人员参与的业务场景
很多业务场景都是需要人员参与到流程处理中的,最典型的就是审批。每个审批结果都决定了流程的走向,以及消息的发送。审批场景要求人员进行数据提交,而这些信息数据所涉及的动态内容,需要人员填写的表单,就是由前面的工作流自动获取或者生成的。
例如:上面更新完年龄数据后,你可以接着发起一个信息的审核。
图 23 与人工相关的动作节点
图 24 审批节点及分支设计
运算、逻辑和流程控制
运算节点支持多种常见的运算类型,数学计算也支持自定义公式。
图 25 各种运算类型和自定义公式
流程控制支持基本的分支条件判断、延时。流程之间也支持调用和嵌套以实现功能的复用。而对多个对象的处理,你还可以选择并行模式来实现基本的“多线程”。
图 26 分支条件判断
图 27 子流程的调用和并行处理
与外部系统的集成
明道云支持非常灵活的 API 对接。其除了会为每个工作表自动生成标准接口,还能在工作流中使用 Webhook 节点动态访问外部接口,并将返回的结果用于工作流的后续处理。
例如:在一个对百度保单识别的调用中,其可以完全根据接口的规范要求定义报文的请求格式,并根据服务端返回的结果决定后续处理动作。
图 28 外部接口请求
用原生代码自定义业务逻辑
为了让产品更好地适应用户的个性化需求,明道云也支持在工作流中嵌入原生的代码片段(支持 Node.js 和 Python 两种语法)。我们可以把它理解为编程中的自定义方法。你可以自行定义方法的内部逻辑,方法的参数列表(参数来自上游的流程)以及方法的返回值(返回值课被后续流程使用)。
图 29 自定义方法
三、小结
本次的分享并没有将明道云的方方面面都罗列进出来。尤其是对于有一定使用经验的用户,这可能会有一点缺乏新意。但该文章的初衷是想让那些熟悉传统代码开发的朋友能换个视角快速认识明道云零代码平台的能力和特色。
零代码不是万能的。这就像我们现在也没有讨论出来到底哪一种语言才是“世界上最好的语言”。但是这并不妨碍一个新技术在适当的时候产生,在适合的地方发挥它的作用。希望明道云能成为大家在解决企业级需求问题过程中的一把锋刃的瑞士军刀,灵活多变,经久耐用。