NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

前端架构设计优化:构建可扩展的低代码平台

作者:郝振佳

  • 2023-03-10
    北京
  • 本文字数:3578 字

    阅读完需:约 12 分钟

前端架构设计优化:构建可扩展的低代码平台

自 Forrester 在 2014 年提出低代码的概念以来,特别是 2021 年国内低代码厂商的融资热潮以来,低代码化已经成为现今各大企业调研和践行的热门方向。面对日益复杂的需求和应用场景,可扩展性对于低代码平台的重要性日益凸显。我们将从整体架构设计、页面描述协议设计、渲染器和设计器的架构设计这四个方面,来探讨如何设计一个高可扩展性的低代码平台。

 

本文整理自中设数字前端架构师郝振佳在今年 8 月 ArchSummit 全球架构师峰会(北京站)上的演讲分享,主题为“可扩展的低代码平台前端架构设计”。分享主要分为四部分:1、低代码发展概述;2、低代码平台前端整体设计;3、低代码平台可扩展能力设计 4、低代码平台的未来与展望。

 

低代码发展概述

什么是低代码?艾瑞咨询在 3 月 2 号发布的中国低代码行业生态发展洞察报告上面是这么说的:低代码开发平台是通过为开发者提供可视化的应用开发环境,降低或去除应用开发对原生代码编写的需求量,进而实现便捷构建应用程序的一种解决方案。如果说猪站在风口上都可以飞起来,那么低代码可能是我们前端离风口最近的一次。


低代码平台的应用场景可以分成通用型和垂直型这两类。低代码平台的产品形态可以按照搭建时是否需要代码来分成狭义的低代码平台和零代码平台这两类。它们面向的对象不同,关注点也有所不同。狭义的低代码平台主要服务于关注业务逻辑的开发部门,可能给开发用,有可能给前端用,也有可能给后端用,需要有少量的代码来进行模块衔接等等一系列的辅助功能。零代码平台更多的强调面向于业务部门,更强调其低门槛性,业务的同学可以在不写一行代码的情况下,仅仅通过可视化拖拽的方式来完成系统的构建,只需要理顺业务逻辑就可以了。



我们在此对低代码平台和零代码平台做了个对比,列出了三个概念,叫做 ProCode 和 LowCode 和 NoCode。像 NoCode 这个方向,随着使用门槛的降低,同时也失去了灵活性,想要强调灵活性,可能就需要向 ProCode 方向发展,就是纯手写代码没有实现不了的功能。


那么,有没有一种解决方案可以做到兼具灵活性和使用门槛低?在这里,请允许我卖一个关子,我们接着往下进行。

低代码平台前端整体设计

整体系统架构设计

第二部分是低代码平台的设计。我们的任务是要满足集团内所有的 2E 和 2B 的移动端页面的搭建需求。我们大概的组织结构是,前面会有一个前端研发部,后面有不同的业务部门,他们所负责的各个应用 App 页面的风格各不一致。我们要先明确系统的设计目标,它是一个移动端的低代码平台,是一个通用型的具有高可扩展性的低代码平台。因为我们只关注页面的搭建,不需要去关注流程表单以及可视化 BI 之类的东西,我们仅仅关注于纯前端的页面搭建。



我们平台的架构基本上关键部分由四部分组成。位于核心部分的是页面描述协议,它是连接各个部分的中枢,页面设计器负责生成页面描述协议。平台后端做页面描述协议的存储以及附属的逻辑等等,另外要有一个运行时,它的核心是渲染引擎,它是页面描述协议的消费者。



我们如何才能够覆盖更多的个性化需求?在这里,我们列举了代码能够实现的功能。我们以 View 为例,它可能有属性、事件、Data、计算属性、Watch、方法等等一系列逻辑。你写代码能够做到的,我们低代码平台都有对应的形式给你提供支持,不敢说满足百分之百的个性化需求,但 90%以上没有问题。在对应的 LowCode 端,我们做了对应的解决方案,像计算属性和 Watch 都能够通过配置来解决,像 Data 这一侧我们引入了变量这样一个概念,它的使用过程跟 Data 的定义以及修改是差不多的,像方法我们引入了自定义方法,在业务上,我们可能会有业务组件,后面规划会去做区块模板等等一系列的功能,这是提高扩展性的总体思路。



页面描述协议设计

在设计的过程中,我们怎么去做页面描述协议的设计?现在的 MVM 页面 UI 已经抽象成了一个一个的组件树,而我们做得更进一步,把组件树抽象 JSON 化为 SchemaNodeTree,每一个 SchemaNode 的结构针对于组件的属性和事件去做处理。


基于插件的渲染器设计

为什么我们要先说解析引擎?是因为页面设计侧跟解析引擎有一些关联。对于解析引擎,我们的设计思路是一切皆插件。我们底层实现了一个 PluginDriver,由对应的 PluginManager 去管理整个 Plugins,再往上是一个扩展层,对应着各个 Plugins 的实现。Evaluator 求值器也是插件,只不过随着页面协议确定之后,它的逻辑相对固定,不太可能会变化,我们把它放到了 Core 层。组件渲染 SchemaRenderer 是总体的出口,再往上是我们设计的一系列插件。像 Passers,负责的是把 Schema Node 解析成对应的组件以及一些个性化的逻辑,Validators 大家应该相对比较熟悉,就是去处理 Form 的一些校验等,Actions 是我们对 Events 处理抽离出来的一个插件。另外包括一些像请求拦截的拦截器等等一系列 Utils 是在扩展层。最上面有一个封装层,封装层算是一个出口,我们把整个引擎做了一个简单的包装提供给 API。



配置驱动的设计器设计

页面设计器的设计思路用一句话来形容就是配置驱动。我们虽然分了配置层、服务层、数据层、组件层和业务层,但是大体可以分为两层,上面属于核心能力的提供,下面属于配置和扩展。我们的页面设计器仅仅做核心能力的提供,具体的能力由配置来驱动。我们的配置目前分成三部分,第一部分是组件,就是页面能够实现的程度多么丰富,取决于平台能够支持的组件有多么丰富,我们在后面再去扩展层做详细的说明。提供能力扩展的是插件,就是前面讲到的解析引擎的各个插件。阿里开源的 LowCodeEngine 是一个非常优秀的框架,我们借鉴了它的思路也对 Setter 进行了抽离,支持 Setter 扩展。再往上是 AssetsDriver,对扩展层管理的功能,有 ComponentAssets Manager 去管理组件,PluginAssets Manager 用管理插件,SetterAssets Manager 用来管理 Setter。数据层是 VUEX 实现的一个全局的数据通信。再往上我们会抽离一些对应的组件,在业务层进行组装。

低代码平台可扩展能力设计



最后,我们对低代码平台的扩展能力做一个总结,它可以分成能力提供层,中间一个连接上下的协议层,以及上面一个扩展层。底层是核心的页面设计器和渲染引擎,再往上提供了一系列的描述协议,包括:页面描述协议用于页面的展现以及渲染引擎核心的关联,组件描述协议对组件进行约束和定义,还有插件描述协议和设置器描述协议。另外我们在组件、插件和设置器层进行扩展,就能够完成我们最终能力的实现和丰富。

未来和展望

低代码会不会替代程序员

所有前端的同学还有一些使用过后端的同学都有这样的疑问,就是低代码平台会不会把我们替代掉,我们会不会失业?低代码平台会不会替代程序员?我个人的观点是,首先低代码平台是一个提效工具,未来可能低代码平台会变成像 Office 一样的工作技能,所以低代码平台更充满想象空间的地方是能够让更多的人运用低代码平台去做我们原来需要程序员经过许多年培训才能做的工作,可能他做出来的性能不那么优,但是能够初步满足业务的需求,所以现在低代码的行业都会说未来可能是一个人人都是开发者的时代。


另外,我觉得低代码平台等等现代技术的发展,是对程序员的抽象能力和架构能力提出了更高的要求,所以我们要在基于对业务的理解的基础上做抽象和架构的设计,能够很好地支撑低代码平台的架构以及可维护性。我们要去理解设计模式、抽象以及架构等一系列的技能,能够脱离出业务,写出一些更抽象型更通用型的代码。


最后,个人感觉有可能在未来会出现低代码开发工程师这样一个新的职业,他可能是基于各种各样的低代码,加上少量的程序支持,快速做系统的开发和交付。大家如果对架构等深入内容无感的话,可以关注这个方向。

低代码的未来



还记得前面我卖的那个关子吗?我们有没有一种解决方案能够让它兼具灵活性和低使用门槛?我们的一些思考是这样的,就是可能未来的低代码架构可以称之为哑铃型的架构,中间会有一个相对比较核心的低代码的框架去做支撑,然后向下连接的是 ProCode,可以有自己的组件生态、插件生态以及设置器生态等一系列通过 ProCode 来实现的能力。这些能力进行有机组合可以产生出各种各样的面向各个功能的低代码平台,或者是零代码平台,就是往上是 LowCode,或者是 NoCode,往下是 Pro Code。它会有 LowCode 框架这一层去做中枢或者桥接,把它们有机地结合在一起,形成一个生态。首先它是一个有机的生态,是一个一体化的系统。其次,我们可以牺牲它的灵活度,面向于具体的领域形成对应的零代码的解决方案来降低大家的使用门槛。或者零代码平台有对应的低代码平台做支撑,一旦你的需求不支持,第一步的解决方案是支持平滑升级到低代码平台,做增强功能的建设。如果再不支持,就需要程序员介入,以插件或者组件等等一系列的方式来做个性化的定制。虽然我们表现出来的可能是一个零代码平台,但是背后一定要有一个完善的生态去支撑它。

相关阅读:

低代码开发平台 助力教育行业信息化建设

低代码开发平台 让数据应用不再复杂

一款好的低代码开发平台应该是什么样?

低代码开发平台 打开数字化转型普惠之门

2023-03-10 16:307459

评论

发布
暂无评论
发现更多内容

美团点评高级1234面:算法+HashMap+Zookeeper+线程+Redis+kafka

钟奕礼

Java 编程 程序员 架构 面试

专科出身,2年进入苏宁,5年跳槽阿里,论我是怎么快速晋升的?

钟奕礼

Java 编程 程序员 架构 面试

百家号在线视频编辑器的技术演进

百度Geek说

大前端

Java高级研发:2021阿里天猫、中间件、蚂蚁金服JD要求+面题答案

钟奕礼

Java 编程 程序员 架构 面试

区块链电子印章签约平台的搭建,区块链电子签约解决方案

13828808769

区块链 #区块链#

Redis 期中测试

escray

redis 学习 极客时间 Redis 核心技术与实战 4月日更

大厂面试必须掌握的 Linux 性能优化题

倪朋飞

Linux 面试 性能优化

gorm源码阅读之schema

werben

Go 语言 gorm

年纪轻轻,为什么要搞中间件开发?“路怎么走,让你们自己挑”

小傅哥

Java 分布式 小傅哥 中间件 架构设计

gorm源码阅读之callback

werben

Go 语言 gorm

公安合作作战指挥中心,情报分析研判系统建设

RTC技术干货 | 音频质量评价体系那些事

拍乐云Pano

音视频 WebRTC RTC 3A算法 音频

2021阿里面试通关手册必备:5000字面经解析(技术/攻克)

比伯

Java 架构 面试 程序人生 计算机

架构培训作业

肖春

架构师训练营

4月日更挑战|初夏开更,新人领书

InfoQ写作社区官方

4月日更 热门活动

无人驾驶平台,让IT没有难做的测试

鲸品堂

方法论 无人驾驶

大厂面试必问!Android彻底组件化方案实践方法!面试总结

欢喜学安卓

android 程序员 面试 移动开发

访问控制相关概念及常见模型

龙归科技

身份和访问管理

WebRtc学习之旅 —— Android端应用开发

小驰笔记

微众银行区块链开源基于Rust的Wasm合约语言框架Liquid

Patract

智能合约 rust polkadot Patract Wasm

Redis-技术专题-数据日志持久化

洛神灬殇

redis 持久化 aof rdb

区块链电子合同签署平台搭建,区块链电子存证解决方案

13828808769

区块链+ #区块链#

量化策略系统搭建,马丁策略交易软件

4K Video Downloader V6.1.50 版本正式发布

科技猫

产品 软件 行业资讯 开发日志 发布

安卓开发从零开始!分析Android未来几年的发展前景,安卓系列学习进阶视频

欢喜学安卓

android 程序员 面试 移动开发

DevEco Studio 2.1 Beta3强势来袭

Geek_283163

华为 鸿蒙 开发

探索js让你的网页“自己开口说话”

云小梦

JavaScript 音视频 audioContext API

Golang 泛型浅析

D

开源 云原生 编译器 语言 Go 语言

一周信创舆情观察(3.22~3.28)

统小信uos

源中瑞智慧平安社区--为平安生活助力

13530558032

EGG NETWORK阿凡提以“自由匿名竞价”流通市场EFTalk

币圈那点事

前端架构设计优化:构建可扩展的低代码平台_大前端_InfoQ精选文章