CodeWave 智能开发平台建立 NASL 语言,最主要的目的就是提供一门前后端统一的低门槛可视化编程语言,让普通人不用学习 JS/Java/SQL 等就能完成企业级应用的开发。下面从“统一前后端、降低学习门槛”和“可视化增强可阅读性”两个方面展开,最后再与目前国内外的其他低代码平台做个对比。
一、统一前后端、降低学习门槛
企业面对复杂多变的市场需求和客户期望,往往有很高的业务定制化需求,特别是在数据处理、页面交互和视觉还原度等方面。低代码平台要想支持这些需求定制的灵活性,需要具备与传统开发相当的表达能力。而在传统开发领域通常会涉及多个领域的语言和框架学习,比如表达前端页面的 HTML + JS + CSS + Vue/React、后端的 Java + SpringBoot、数据库 SQL 等语言,它们之间往往语法、语义都不尽相同。下面举三个例子:
1. JSON(数据传输)、JS/TS、Java、MySQL 类型的对照表
JSON | JS/TS | Java | MySQL |
---|---|---|---|
boolean | boolean | boolean | BIT(1) |
number | number | byte | TINYINT |
number | number | short | SMALLINT |
number | number | int | INTEGER |
number | number | long | BIGINT |
number | number | float | FLOAT |
number | number | double | DOUBLE |
string | decimal.js | BigDecimal | DECIMAL |
string | string | String | VARCHAR/TEXT |
string | Int8Array | byte[] | BINARY |
string | Blob | byte[] | BLOB |
string | string | UUID | char(36) |
string | Date | LocalDate | DATE |
string | Date | LocalTime | TIME |
string | Date | LocalDateTime/ZonedDateTime | DATETIME |
string | enum | enum | ENUM/VARCHAR |
2. 常见的一些数学运算举例
JS 中
// 字面量计算
1 / 2; // 0.5
// 想保留两位小数
var num = 1.42857;
num.toFixed(2); // '1.43'
Java 中
// 字面量计算
1/2 // 0
// 想保留两位小数
double num = 1.42857;
DecimalFormat df = new DecimalFormat("0.00");
df.format(num); // "1.43"
MySQL 中
// 字面量计算
1 / 2; // 0.500,这里是 MySQL 的结果,其他数据库可能不一样
round(1.42857, 2); // 1.43
3. 列表筛选的举例
比如筛选出“王”字前缀的项,
JS 中
list.filter((item) => item.name.startsWith('王'));
Java 中
list.stream().filter(item -> item.name.startsWith("王"));
MySQL 中
SELECT * FROM table1 WHERE name LIKE '王%'
可以看出,各语言的语法、语义层面都有差别,官方的内置函数库也不太一样。而且除了学习几种语言,还得熟悉他们之间怎样结合。因此普通人要想搭建一个完整的 Web 应用,知识储备需要很完善才行,有着很高的学习门槛。
任何通用的低代码平台只有很好地解决掉业务定制化需求和上手专业语言框架之间的矛盾,才能真正意义上让普通人员参与到企业级应用开发中,实现在满足业务定制化需求的同时,降低开发成本。
二、可视化增强阅读性
经过研究分析,在多数领域可视化相比于文本会包含更丰富的信息,阅读性起来更直观更友好,对普通人来说更易于学习。下面举三个例子:
1. 批量赋值
批量赋值是集中赋值多个变量的场景。
JS 代码如下:
tempItem.deptId = item.deptId;
tempItem.deptName = item.deptName;
tempItem.cost.centerId = item.costCenterId;
可视化效果如下:
另外,这里可视化结合 AI 智能会将两边字段相似度高的进行自动连线。
2. 模式匹配(涵盖了选择分支)
JS 代码如下:
switch (status1) {
case 0:
//
break;
case 1:
//
break;
case 2:
//
break;
}
Java 代码如下:
switch (status1) {
case Status.normal:
//
break;
case Status.warning:
//
break;
case Status.error:
//
break;
}
可视化效果如下:
3. 字符串插值
JS 代码如下:
`您负责的${version.year}年度(v${version.code})${project.type}资产预算仍未提交,请登录资产预算系统填报提交:${app.url}`;
Java 代码如下:
String.format("您负责的%s年度(v%s)%s资产预算仍未提交,请登录资产预算系统填报提交:%s", version.year, version.code, project.type, app.url);
可视化效果如下:
二、与国内外低代码平台的对比
国内绝大多数低代码厂商由于只封装了部分数据建模和前端页面的可视化,在用户处理 API 数据和定制页面逻辑时,仍然需要专业的 JS/Java 代码编写,因此没有从根本上降低门槛。
1. 逻辑编写的难度
拿阿里低代码引擎来说,给按钮添加一个简单的事件,就需要编写 JS 代码了,还需要学习 React 框架(setState, componentDidMount 等)相关概念:
而 CodeWave 智能开发平台是这样的可视化编辑方式,对于非专业开发人员很容易学习上手:
国外顶尖的低代码平台 OutSystems 和 Mendix 也是和 CodeWave 智能开发平台采取了相同的思路:
2. 语义检查的能力
用户在进行灵活表达时,容易遇到以下一些语义错误,比如:
- 赋值左右类型不一致;
- 调用某个函数,传入的参数类型不对;
- 前端组件双向绑定不允许填计算表达式;
- …
低代码平台需要提供更多排查错误、精确友好的提示以及其他辅助功能,才能减少用户的出错概率、增强使用体验。
比如阿里低代码引擎,只做了 JS 的基本检查,选不出下一级字段。
而 CodeWave 智能开发平台,集成有强大的 Language Server,支持在传统静态类型语言中常见的类型检查、自动补全、查找引用、跳转定义、重命名相关、悬浮提示等各项能力。
下图中包含多个例子:底部的问题面板会实时显示用户编辑时的类型错误,在可视化区域也有对应的红框展示,变量下拉菜单会根据类型计算出下一级字段。
国外顶尖的低代码平台 OutSystems 和 Mendix 也是和 CodeWave 智能开发平台采取了相同的思路:
3. 前后端一体化开发
阿里低代码引擎数据源只支持到接口层,可视化以前端搭建为主。也就是说,一定要由企业的专业开发者提供服务端才能使用。
而在 CodeWave 智能开发平台中,不仅可以使用其他服务的接口数据,也可以直接在应用内创建实体(数据库表)。用户在使用时没有明显的前后端隔阂,没有要学多套技术栈的感受,减少了很多中间处理成本。