低代码这个概念这两年极火,低代码专指低代码应用开发平台(LCAP),是一个被业界广泛认可的概念,头部的分析机构如 Forrester 和 Gartner 都已经发布了多年低代码开发平台。国内低代码平台也发展得如火如荼,衍生出OutSystems 和很多国内所谓的低代码平台。低代码包含六个显著特征:模型驱动、可视化开发、表达式语言、软件工程、开放集成和脚本语言。
1)模型驱动
“模型驱动”可能是最明显的区分标志,因为刚好有一个也很流行的概念叫“表单驱动”。很多人搞不清楚这两个概念,但其实这两类产品挺好区分。
首先可以看用户手册,这样不用安装试用也能看出差别。使用模型驱动的平台比如 OutSystems、Mendix 的手册会有很大一章讲怎么做数据建模和处理,包括怎么定义实体、实体间关系、主键、唯一性、索引、数据怎么访问、筛选、分组、统计等等,还提供 SQL 或类似扩展。使用表单驱动的产品则往往手册第一章就是说明怎么定义各种表单,都是各种和界面相关的控件,比如单选多选下拉框、文本日期数字等。
其次可以看界面。下图是分别是模型驱动的 OutSystems 和某表单驱动产品的相关操作界面,大家看是不是很不一样。
(模型驱动,OutSystems)
(表单驱动)
(2)可视化开发
可视化开发不是拖拉拽做个界面(这只能叫可视化设计),而是要拖拉拽写处理逻辑。看 OutSystems 这类产品的文档,你会发现很多编程语言的基本构造都有,比如顺序 / 分支 / 循环 / continue / break、输入输出参数、局部变量 / 全局变量、struct 和 list、异常等。虽然这些东西都是拖拉拽完成,看上去没有密密麻麻的一行行代码来吓人,但也足以吓退业务人员。一下几张图都来自于 OutSystems,大家可以感受一下。
(左:逻辑开发工具箱,注意有 If、Switch、For Each 流程控制;右:一个比较简单的逻辑)
(怎么抛出和处理异常)
(3)表达式语言
表达式语言有些类似 Excel 里的公式,有表达式语言才可以做一些比较复杂的计算。下图是 OutSystems 的表达式编辑器,大家可以看到有各种操作符,还有很多内置函数,比如数学函数、字符串处理函数等。
OutSystems 这个例子看起来还比较简单,但表达式语言也可以很复杂。微软是搞语言的行家,下图是个微软 Power Fx 的例子,这个表达式是要提取一个句子最后一个单词的表达式,也挺复杂吧(说实话我看了好大一阵子才看懂)。
表达式语言也有更平易近人的设计,比如我们轻舟就是用类似 Scratch 的积木块设计。两种设计功能上是等价的,积木块设计更容易上手,Power Fx 这样的设计写复杂表达式更方便。
(4)软件工程
专业的低代码平台需要提供测试、debug、版本控制等软件工程支持。开发软件都会出 bug(低代码平台基本消除了语法层面的 bug,但对语义层面的 bug 一样无能为力),需求也总是会变。所以测试、debug、版本控制这些支持也是必不可少的。OutSystems 为什么做的最好,我觉得跟它完善的 debug 支持是分不开的。下图是 OutSystems 的 debug 界面,看起来和专业 IDE 有的一拼。
(5)开放集成
理论上,有了模型驱动等上述四大功能,开发一个不是太复杂的独立应用就够了,但典型的企业软件都是相互依赖和集成的,所以平台还需要具备能够调用外部 API 和开放 API 给别人的能力。平台如果没有这两方面的功能,开发出来的应用相互之间都没法连通和集成,全是技术债。我们看国外关于低代码的文章,经常会看到一个词叫 Shadow IT,说的就是这个问题。大家都胡乱的开发各种应用,还都集成不起来,将是一场大灾难。
(6)脚本语言
脚本语言就是用 JavaScripts、Python、Java 等做扩展,这些其实就是正儿八经的专业编程语言了,但低代码平台会把工程复杂性都封装好,让开发者不需要配置部署环境,随手就可以写代码,写完一键发布马上可以运行。
其实上述标准和 Gartner 是很一致的。Gartner 在魔力象限报告里说:
An LCAP is characterized by its use of model-driven or visual development paradigms supported by expression languages and possibly scripting…
里面模型驱动、可视化开发、表达式语言、脚本语言都提到了。