你的低代码应用是真正的“低代码”应用吗?

时间:2022-12-09 18:19:42

今天听了58关于低代码技术的部分分享。从前面的分享来看,是从现状出发,解决了落地的诸多问题,从应用的部分来看,是节省了时间,有30倍效能提升。我注意到分享的过程中有许多概念和问题,的确是开发过程中应该注意的,但真正的低代码开发就是这个样子吗?我又去找了好些低代码产品来复习,比如阿里的低代码引擎,概念更多,面对综合示例,有一点信息爆炸的感觉,业务人员怎么下手呢?我耐心看完三篇协议规范后,还是被一堆概念堵塞着,这些都是必须吗?

不能只是“低代码”

低代码应用的技术特征是低代码,通常是通过“搭积木”的方式开发出来。IT技术人员对此又爱又恨,爱的是可以节约大量的开发时间,极大的提高生产效率,恨的是长此以往拼拼凑凑,难免武功全废。 但低代码应用的典型用户是业务人员,评价低代码应用,要从业务使用的角度来看,甚至于完全不能从软件开发的角度出发。理所当然,低代码应用不能只叫“低代码”应用这么技术化的名字。 那么低代码应用的本质是什么呢?或者是低代码应用的出现表示了什么?我们从低代码的内外视角了解一下。

向内观察

低代码的开发过程

低代码开发不能回避软件开发过程:

  • 物料组织及管理:按照某个规范(NPM)创建、发布、更新物料
  • 设计组装及调试:按照场景或者需求组装物料并进行详细设置,通过实时预览确认满足设计需求
  • 发布运行及更新:自动化打包并发布

当然,更简答的方式就是直接克隆一份已有应用代码,简单修改后直接发布。

我们可以看到的优点是:

  • 零编程入门:不需要掌握代码编程,对编程语言没有要求
  • 多物料堆叠:根据需要重用物料,需要掌握物料知识
  • 所见即所得:设计和多端预览都很方便
  • 自动化过程:编程、发布对用户透明

我们可以看到的劣势是:

  • 专用的开发工具:与现有的编程工具不同,是一种设计、预览、发布一体化的 IDE 工具,一般联网使用
  • 特定的设计流程:和其他工具不通用,只能用于同一套开发工具
  • 复杂的设计衔接:需要理解编程知识,管理页面函数和变量
  • 特定的发布流程:有些只能发布到指定平台,并不能自己构建

低代码的代码特点

编码是研发过程的必要环节。 我们在说编程语言的时候,高级编程语言与低级编程语言相比,语义更强,同样的功能实现代码量更少,开发效率高。 换个说法,越接近于机器指令的,越是“低”,越接近于人类语义表达的,越是“高”。 而“低代码”和“高代码”的高低与编程语言是相反的,低级代码似乎并不“低级”。 “低代码”开发中使用的组件强,效率高,代码量少,“高代码”的开发效率取决于工程师,代码量一般比较大。
应用是软件结果的必要体现。 低代码应用中有大量的配置,几乎是一切皆配置。从配置的详细程度来看,细节全部暴露了出来。 但配置不是一种代码吗?比如一种声明式代码?虽然大部分配置是通过 IDE 生成的,并不需要手写。 从配置的来说,低代码是多配置应用。配零代码就是全置应用。
从这个意义上讲,低代码并非是低代码,而是大量的配置代码。

借鉴外部

跨专业的融合需求

低代码应用的广泛说明了业务人员对于计算机应用软件的需求,同时也说明信息技术普遍融合到了业务中。

这里不妨借用一下几个产品来说明一下。

从书面文章到电子文章 - markdown 编辑器

在网站上发表文章,需要先编写后排版。如果没有模板,就要先学习网页三件套,html/css/javascript。 但写作者来源千差万别,不可能都想学习这三者,尤其是 javascript。 开发工程师提供的方案从 textarea (多行文本框)升级到 richTextEditor(富文本编辑框),使编辑器的易用性有了很大的提升。 但从来没有哪一个富文本编辑框得到了与 markdown 编辑器相当的影响力。这是为什么呢?

mardown 编辑器使用特点

  • 理解零难度,识字就可以看懂,无需专业知识
  • 起步零门槛,会用输入法就能写,最简单的文字排版只需要按回车符
  • 升级成本低,增加了一些简单的字符,就可以完成文章结构组织、样式标记
  • 学习无要求,可以学一项用一项,不用可不学

我们只需要学习写文章的知识,

  • 有了段落和标题就可以写很多文档了
  • 有了强调、下划线、删除线就可以文字的样式
  • 有了图片、列表、引用就可以丰富内容
  • 如果要写办公文档,再学习表格
  • 如果要写论文,再学习公式
  • 如果要强调专业呈现,再学习各种专业图表

如果熟悉了 markdown 的语法,你还可以获得的好处是:

  • 任意编辑器编写,发布时复制到指定平台即可
  • 通用性强,各家编辑器都可实时预览,主要功能兼容

在写电子文章这件事情上,相比开发网页,markdown 编辑器是不是提供了一种“低代码”实现途径?

从计算工具到电子报告 - jupyter notebook

但凡亲自做过数据分析或者科学实验的人都知道,数据分析不好做。数据采样、数据加工、数据分析、数据呈现,一次分析有70%以上的时间都花在这些过程上。 有了计算机,我们一般都编写数据处理程序来替换人工处理过程,提高效率。 无论是怎样使用程序,都避免不了数据的输入、输出和函数的改进,很难一次编写到位。这就要求分析人员具有编程的基础。 而一旦当你使用了基于 python 的 jupyter notebook,一切困难都迎刃而解。

jupyter notebook 使用特点

  • 可以写文档,具有明显的顺序结构
  • 可以编写单行代码,也可以编写代码块
  • 可以立即执行某个代码块,也可以调整顺序执行多个代码块,也可以不执行
  • 执行结果可见,可以缓存
  • 可以画图

我们甚至不需要了解编程语言里的函数和变量,因为它是和数学相通的,表达方式也一致。 只要你会数学,你就可以做数据分析。 我们只需要学习数学函数

  • 理解数值、数组、矩阵
  • 理解预处理、统计、分析函数及其使用方式
  • 理解绘图函数及其呈现结果

如果和使用 jupyter notebook 的人协作,你完全可以将文件分享给伙伴,文件记录包括:

  • 研究的操作步骤
  • 每个步骤采集的数据
  • 每个步骤的处理函数
  • 每个步骤的处理结果
  • 每个步骤的图像分析

在电子报告这件事情上,相比编写 word 文档或者使用更加专业的分析工具,jupyter notebook 是不是提供另一种“低代码”的实现途径?

融合思考

低代码应用需要新解决方案

从已有的广泛使用的低代码应用来看,低代码应用应该具有以下特征

  • 专业知识的表达简洁,易于理解,甚至零学习成本
  • 编写时可以不依赖于特定的工具,具有广泛的支持
  • 进阶时支持渐进式学习方案,知识点即学即用
  • 运行时可以指定执行工具,执行规则透明可重复

所以我们是不是可以对低代码应用有一个新的解决方案期望?

  • 一种新的业务需求表达方式,非 IT 人员也可以轻松的表达应用需求
  • 一种新的业务需求管理方式,非 IT 人员也可以轻松的应用变更
  • 一种新的业务应用运行方式,按标准或着规范运行
  • 一种新的业务应用编译方式,可以打包为通用格式在多个平台上运行

低代码应用的新构建

我们可以基于以上思考来尝试构建新的应用

物料库

  • 源码使用 git 管理,比如 github / gitee / gitlab 等
  • 图片素材可以使用文件存储,比如腾讯 COS、阿里 OSS 等

物料

  • 元数据:数据标准或者规范,用于描述模型
  • API:基于元数据的数据访问服务,主要是自动生成
    • 基于元数据的原子 API,自动生成,也可以手动配置
    • 基于元数据的数据处理原子 API,可以通过模板生成,也可以手动配置
    • 基于 GraphQL 和原子 API 的组合式 API
  • 组件:基于元数据的可视化交互元素
    • 基于 npm 包的组件实现

其中

  • API 和组件可以实现为单文件,通过 url 访问
  • API 和组件均支持私有和公有

应用

基于组件构建,可连接API,符合某个元数据标准的程序

工具

  • 编辑器:支持 yaml 编写的文本工具
  • 预览器
    • 远程:Web 浏览器
    • 本地:electron
  • 编译器(对用户透明)
    • 方案A: 基于 vitejs 的构建
      • 前端构建工具 vite
      • 构建管理
  • 表示载体:yaml 由于应用的结构一般较为复杂,需要选用层次化结构的语言,在表达上,我们可以选择 yaml 作为基本载体。

应用的极简表示

以图书信息的 CRUD 为例,编写以下文件即可

app:
    exmaple.com/web/v1/book:
        page: 
            - 图书:名称,ISBN,出版社,数量,单价,总价 | public.com/mat/v1/list

其中

  • app:表示本文件描述的数据为应用
  • exmaple.com/app/v1/book 表示应用的部署地址,包含
    • 应用所属 exmpale.com
    • 类型: web
    • 版本:v1
    • 名称:book
  • page: 表示按照这是一个单页应用
  • 图书:名称,ISBN,价格,数量,单价,总价 表示模型的详细信息
    • 名称为 图书
    • 属性为:名称,ISBN,出版社,数量,单价,总价
  • | public.com/mat/v1/list 表示模型使用的组件
    • | 为管道符号,连接模型和组件
    • public.com/mat/v1/list 是组件对应的 URI,点击可以访问

使用构建工具 lowcode build exmaple.com/web/v1/book -o book 即可得到应用实例。 当然也可以在线预览 lowcode preview exmaple.com/web/v1/book 即可实现实时预览。

模型表示

为了更加准确的描述模型,我们要编写元数据。

以下描述图书模型: example.com/md/v1/book.yml

图书元数据1

model:
    /md/v1/book:
        图书: 名称,ISBN,出版社,数量,单价,总价         

图书元数据2

model:
    /md/v1/book:
        图书:
            - 名称 > "你当像鸟飞往你的山"
            - ISBN > "9787544276986"
            - 出版社 > "南海出版公司"
            - 数量 > 10
            - 单价 > ¥59.00
            - 总价 > ¥590.00

可以通过完整的示例来描述数据,由编译器自动推断类型。

图书元数据3

如果存在多种示例,可以全部列出。 比如内部刊物没有 ISBN 的,数量有为0的,单价有1000元的,单个书目总价超过100000元的。

model:
    /md/v1/book:
        图书:
            - 名称 > "你当像鸟飞往你的山"
            - ISBN > "9787544276986", ""
            - 出版社 > "南海出版公司"
            - 数量 > 10,0
            - 单价 > ¥59.00,¥1000.00
            - 总价 > ¥590.00,¥100,000.00

对于存在多种示例的,系统会自动推断数据范围。

图书元数据4

当然也可以自行定义数据类型,版本如下:

model:
    /md/v1/book:
        图书 | book:
            - 名称 | VARCHAR(30) > "你当像鸟飞往你的山" 
            - ISBN | VARCHAR(20) > "9787544276986"
            - 出版社 | VARCHAR(30) > "南海出版公司"
            - 数量 | INT > 10
            - 单价 | DECIMAL(6,2) > ¥59.00
            - 总价 | DECIMAL(11,2) > ¥590.00         

当然在此处,如果查看 /md/v1/book,可以看到定义的信息和系统推断的类型信息。

组件表示

这里组件是包含业务模型的组件,包括数据源和物料。 数据源应该是 API, 也可以直接使用模型,可自动自动生成 API。

基于模型的组件表示

以下描述组件实现: example.com/ui/v1/book-list.yml

component:
	/ui/v1/book-list:
		model: /md/v1/book
		type: public.com/mat/v1/list

基于 API 的组件表示

如果数据源是外部 API,可以表示如下

component:
	/ui/v1/book-list:
		api: another.com/api/book
		type: public.com/mat/v1/list

应用的进阶表示

对不不同的应用,组件的组织方式不同。 可以针对单页、门户、管理后台等设置多种模板。

app:
    /app/v1/book:
        public.com/template/console: 
            name: 图书管理系统
            copyright: example.com © 2022
            login: post:/md/v1/session | public.com/mat/v1/login
            logout: delete:/md/v1/session | public.com/mat/v1/logout
            menu:
              - 物资管理
              - get:/md/v1/book | public.com/mat/v1/list

我们可以先选择模板,按照模板要求配置信息或者组件。

小结

高度的语义特征是低代码的特质。 将编程变为配置,缩减编码量,只是将事情变复杂,因为用户要进阶使用还是绕不开专业知识点。 只有将代码高度浓缩,隐藏IT技术细节,变成描述性语言,让其他行业的人员易于理解和学习,才有可能变为真正的低代码。
低代码浪潮已经来了,低代码应用的变更维护也在路上。进化之中方显本色,哪一种更好呢?我们拭目以待。