低代码多分支协同开发的建设与实践

news2025/4/17 12:58:14

作者:黄也(胖丁)

引言

随着低代码的普及,在低代码平台上构建企业级应用逐渐成为生产趋势。同时,随着低代码技术的提升,越来越多的复杂应用在低代码平台中完成。在其研发生命周期中,低代码开发者就会面临多人协作、并行开发、维护多版本的场景。而现有的低代码平台普遍缺乏这一能力或支持较弱,导致对协同开发的成本较高,限制了迭代的效率。

因此我们基于低代码系列相关协议,设计了低代码多分支协同开发的解决方案,以降低协同成本、提高研发效能。

协议原文:https://lowcode-engine.cn/lowcode
低代码引擎官网:https://lowcode-engine.cn/index

本文适合对低代码引擎有基本了解的人,了解低代码引擎的基础协议,并且希望通过文章中得到基于低代码引擎体系的多人协作方案。

为什么要做多人协同

低代码技术在业界已经流行了相当长一段时间了,在阿里内部也有很多低代码平台,其中某平台具有较多的用户量和活跃的中后台应用;在该平台持续的用户调研中,大量用户反馈需要更加优化的协同、多分支能力。“低代码协同开发”问题成为了用户切实的顾虑痛点

现在有什么问题

我们可以从下面几个真实的场景中,来感受一下当前的困境:

  • 当一个页面的开发任务拆分给了两名同学,就只能一人开发完之后,另外一个同学才能进行开发;

  • 当开发的过程中,突然需要修复线上问题,就需要回滚完成修复后,再重头开发新的需求;

  • 当多功能并行开发时,就需要复制多份页面,最后再人工进行 schema 合并;

由此我们可以看出来这个低代码平台有三个问题:

  • **不支持并行开发。**导致开发人员的闲置,限制了开发时长和协同方式。

  • 不支持迭代模式。不具备隔离性,无法支持复杂应用生命周期的迭代需求,尤其对于快速迭代升级的业务,导致迭代成本非常高。

  • 无法合并修改。复杂、无规范的手动合并流程,只有对协议很熟悉的专业人士才能操作,导致合并和验证成本提高。

问题分析

低代码开发本身的优势就在于“成本低”、“速度快”,不能因为协同方案而导致开发复杂度大幅提高。以此想要解决以上的问题,其实有一些需要考虑的问题:

  • 如何“协同”?

在考虑并行开发问题时,其实不应让开发者同时在一个页面里同时操作,而是通过适当的进行拆分解耦;就像在工业生产时,一个机器分解为若干个零件,流水线分别完成零件后再组装成机器。在代码开发时也是如此,那么我们就需要一套类似“零件生产”、“零件组装”的能力,来支持拆分低代码页面。

  • 如何实现多版本?

低代码应用的数据都存储在数据库中,怎么在数据库中实现分布式版本控制,维护不同的应用版本。难道要实现一套基于存储低代码数据数据库的 Git吗 ?

  • 如何控制开发复杂度?

低代码开发者不同于源码开发,他们本身就不是面向“代码”本身,覆盖的人群也不全都是专业开发人员,怎么才能让低代码开发者熟悉多分支开发的流程呢。总不能附上一份《Git从入门到精通》,强行提高低代码开发的门槛。

怎么做多人协同

这个问题在系列文章的前篇《低代码技术在研发团队的应用模式探讨》中,我们也做出了探讨。

我们的整体策略其实是**“刚柔并济”**的组合拳,分为了以下两步走:

  • 削弱:

80% 的并行开发需求都应该通过拆分颗粒度的方式,来降低耦合度、减少必须多人共同开发同一模块的可能性。可以通过设计应用模块划分、合理拆分组件,尽可能的规避需要多人协作的场景。比如:

  1. 通过微前端,将大型应用拆分,通过独立发布功能的小应用来构建大型应用;

  2. 拆分组件:抽象更多业务垂直的能力,区分模块开发。这样同一页面就可以拆分为多个模块,由不同的开发人员开发,也提高了复用性和封装性

  • 硬刚:

在不可避免的情况下,参照源码开发,我们也需要设计一个健壮的**分支管理策略,**来有效管理开发协作、功能迭代和版本并行,更优雅更高效的解决版本控制和合并问题。也就是:

  1. 开发者可以从主干上分离出来一个分支进行操作,既不影响主干,分支之间也相互独立、互不影响;

  2. 当在分支上开发完毕后,可以合并到主干上

如何实现

平台背景

首先介绍下我们这套方案的背景。当前有一款低代码平台,同大部分低代码应用一样,暂时还不能很好的支持协同开发的需求。后续将介绍如何在该平台上应用这套方案设计。

  • 研发流程

新建应用后,就可以通过可视化的方式进行研发,包括以拖拽方式对表单页面进行开发,或者对导航、主题色等进行配置。待完成开发后,即可以将应用发布到日常环境进行测试,接着发布线上资源。

这就完成了一个完整的研发周期,待新需求到来后,再开始下一次的应用开发。

  • 数据储存

应用的所有数据,都是以结构化数据的格式存储于数据库中。数据包括了两种类型,每个应用都会有一份全局的应用数据,关联多个页面数据

当前效果

在系列文章的前篇中,也对研发流程做出了探讨。可见《关于 LowCode&ProCode 混合研发的思考》https://mp.weixin.qq.com/s/TY3VXjkSmsQoT47xma3wig

前文提到了不想由多分支方案带来过高的复杂度,因此我们在流程设计上,整体保留原有研发流程。通过上文中设计的策略,做出了以下的产品设计:

  • 并行开发:支持组件研发

通过支持项目内低代码组件的方式,可以将页面开发需求拆分为组件进行开发,包括:

  • 低代码组件 + 物料描述(优先使用)

    • 这里低代码组件指的是:通过可视化的拖拽、配置的方式生产的组件,具备与 react 源码组件同等的能力。
  • 源码组件 + 物料描述:

    • 参考低代码引擎开源项目中提供的组件形式。

这两种组件都在低代码页面中直接使用。待组件分别研发完毕后,既可以在低代码页面做完成集成。这样就可以在不同的组件中进行独立并行研发。

  • 迭代管理:多分支模式

开发者在创建应用后,通过创建/选择迭代,在独立的迭代中完成自己的研发内容,包括低代码组件和低代码页面的研发;当在当前迭代上开发完毕后,可以合并到主干上。

下文就多分支模式的技术方案和实现,做出详细的阐述:

技术实现

方案设计

1. 依靠 Git 实现迭代管理

既然有 Git 如此成熟且优质的解决方案,当然是选择站在巨人的肩膀上。我们通过双向转换,将数据库中的元数据,通过出码转为为中间码(react-like 前端可理解的形式)并存储在Git中。使用git 的基础能力,来提供分布式版本控制能力。

2. 简单的分支策略

整体流程上,我们保留了低代码应用的开发习惯,只透出迭代的概念,不过多透出分支、commit、pull、push 等概念,而是将其融入发布流程。开发者不需要手动拉取主干或者提交修改,只需要 work in 自己的迭代中,进行开发、测试和发布。也就是的 分支开发、主干发布 的模式:

  • 仅有一条 master 作为主干,所有的分支创建都从 master 复制拉取;

  • 发布日常时,需要合并 Master 的修改;

  • 发布线上后,分支并入 Master 后删除。

整体流程

在支持多分支协同方案后,应用的研发流程如下:

创建应用

会先创建一份应用的数据,保存在数据库中;再创建对应的Git 仓库,同步应用的管理员权限;将Git 仓库的 ProjectId 存储于应用的属性中。

创建迭代

会在数据库中复制一份完整的数据(迭代应用),在迭代的开发过程中,数据都保存在这份【迭代应用】中。同时Git也会从 Master 拉取开发分支,开发分支的名称与【迭代应用】的版本号保持一致,以此作为映射的关联关系。这样各个迭代之间就相互独立、数据隔离。

用户进入应用后,就可以选择不同的迭代进行独立的开发了。

发布日常

  1. [DBToGit] 应用数据转码,保存到Git分支;[Git] 合并主干,依靠Git进行代码合并;如果有冲突,使用 WebIDE 解决冲突

  2. [GitToDB] 分支数据转存到迭代应用

  3. 应用打包 & 构建

转码方案

该流程用于将整个应用的内容转换为指定目录结构的文件并提交至 Gitlab。应用的所有数据都被映射到文件结构中。

页面中的 Schema 部分包含了视图、数据源、页面Js和样式等数据,对数据做出拆分。

页面 Schema 中的组件树部分通过转码转为 JSX+ 语法,更加符合前端开发者的习惯,方便用户完成冲突解决和代码评审。

在 JSX+ 的 DSL 转回组件树原结构时,需要用到抽象语法树,利用 babel 来解析 JSX 文件。再递归遍历语法树,还原回符合《低代码引擎搭建协议规范》的 schema 结构。

发布线上

  1. 发布线上前检查: 主干是否有更新,是否完成评审等

  2. 应用打包 & 构建

  3. [Git] 开发分支合并到 Master

  4. [DB] 迭代应用覆盖线上应用数据

拓展能力

虽然很多低代码平台底层都是使用低代码引擎和协议栈,但是同时他们也有自己的对于协议的扩展。为了满足不同平台的定制化诉求,此方案需要一定的拓展能力,来适应更多平台的使用诉求。

  1. 基于《低代码引擎搭建协议规范》的标准协议,我们设计了对应的标准多分支编码器,同时也提供了多种钩子,方面对协议进行拓展。

  1. 在发布日常和发布线上的服务上,也对应设计定制数据的方式:

dbToGitHook: 供上层平台定制提交到 Git 的数据内;

beforeGitToDbHook: 提供合并了 master 后的 Git 内容,上层平台返回修改后的 Git 结构;不改变git origin 信息,只作为执行转回到数据库的源文件。

可视化多分支协同

以上方案目前已经在企业智能部门的低代码平台开始使用,但目前的方案还只是刚刚 “可用” 状态,依然还存在 “不好用” 的问题。其中最突出的就是 “水土不服” 问题,目前的多分支是参考源码研发体系的多分支玩法设计和建立的,和低代码的使用场景有非常多不契合的点:

  • 看不懂:普遍反馈看不懂冲突解决困难,不能理解 DSL 中的属性;

  • 割裂感:从低代码平台跳转到 WebIDE 去编辑代码,不符合低代码操作直觉;

  • 不可控:自动合并后发布时,对于有什么改动合并结果没有把握;

所以我们将会继续建设好用的多分支解决方案,建立契合低代码心智的多分支研发体验,提供统一的“可视化”解决方案,彻底解决这个问题。包括:

  • 可视化 Diff:使用可视化的 Diff ,帮助用户确认发布线上前的改动点;

  • 可视化 CR:评审者可以可视化得看到开发者所有的修改,更好的做上线前的判断;

  • 可视化 Merge:可以通过点选选择保留的冲突。

其中,我们目前对于 可视化 Diff& CR 的产品设计如下:

  1. 能够查看 该开发分支线上主分支 的差异(即改动点)
  2. 能够 清晰的、可视化的 展示需要关注的改动

tupian

整体设计方案,是根据转化的 DSL 内容计算出变更的信息,通过可视化得呈现出改迭代的所有改动点;而发生合并冲突时,列出冲突的信息让开发者可以通过点选操作,来保留所需的改动内容。

总结展望

未来,将通过这一套完善的解决方案,建设低代码多分支解决方案规范,打造契合 LowCode 场景的协同开发体验。

欢迎关注阿里低代码引擎,了解更多低代码搭建相关技术。

https://lowcode-engine.cn

也欢迎到低代码引擎官方微信群进行更多交流,加微信号 wxidvlalalalal 并备注「低代码引擎,申请入群」即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109585.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

卷积神经网络 CNN 基础概念

目录 一:卷积神经网络 二:局部感受野 三:卷积层 四:池化层 五:激活层 六:全连接层 七:卷积神经网络算法过程 一:卷积神经网络 卷积神经网络(Convolutional Neural Networks,C…

nor flash调试与使用总结

最近项目中使用到norflash,总结一下学习与使用经验 文章目录一、Flash基本概念存储器介绍与Flash在其中定位---非易失存储器类别中嵌入式领域常见设备Flash的典型分类---NorFlash(贵/容量小/读快写慢)与NandFlash(便宜/容量大/读慢…

Zookeeper 4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例

Zookeeper 【黑马程序员Zookeeper视频教程,快速入门zookeeper技术】 文章目录Zookeeper4 Zookeeper JavaAPI 操作4.9 模拟12306 售票案例4.9.1 Curator 实现分布式锁 API4.9.2 分布式锁案例 - 模拟12306 售票4 Zookeeper JavaAPI 操作 4.9 模拟12306 售票案例 4.…

企业经常会问到的软件测试面试题及答案,一定要好好记住

相信对于很多软件测试新手来说,技术项目的面试是十分让人头疼的,生怕没回答得好,就会跟这个offer失之交臂,因此,今天,我以身边朋友面试遇到过的几个问题以及刷过的软件测试题库柠檬班中的压中的题目&#x…

Maven 项目模板

Maven 项目模板 Maven 使用 archetype(原型) 来创建自定义的项目结构,形成 Maven 项目模板。 在前面章节我们学到 Maven 使用下面的命令来快速创建 java 项目: mvn archetype:generate 什么是 archetype? archetype 也就是原型&#xff…

终于有人把性能优化讲清楚了!阿里架构师推荐的Java性能权威指南

Java给大部分人的感觉就是慢,有严重的性能问题。其实程序慢的问题,与语言无关,与Java无关。Java应用的性能优化也是一个老生常谈的话题,但是只要我们深入的了解性能调优方法,走遍天下都不怕! 大多数开发人…

mac系统M1pro芯片安装VMware Fusion虚拟机win11操作系统(原创详细版)

VMware22年11月份推出Fusion 13,这是Fusion虚拟软件的最新更新。它允许Mac用户操作虚拟机来运行非macOS操作系统,如Windows 11。 有了Fusion 13,英特尔和苹果芯片Mac用户可以访问Windows 11虚拟机。英特尔Mac提供对Windows 11的全面支持&…

webpack 构建脚手架

前言 1. 构建项目 2. 局部安装 3. webpack.config.js 4. 打包 css 文件 5. 打包 less 文件 6. 打包 vue 文件 7. loader 和 plugin 区别 8. 添加版权的插件 9. html-webpack-plugin 打包 html 的插件 10. 压缩文件 11. webpack-dev-server 搭建本地服务器 前言 本文记录 webpa…

基于鸽群算法改进的DELM预测 -附代码

鸽群算法改进的深度极限学习机DELM的回归预测 文章目录鸽群算法改进的深度极限学习机DELM的回归预测1.ELM原理2.深度极限学习机(DELM)原理3.鸽群算法4.鸽群算法改进DELM5.实验结果6.参考文献7.Matlab代码1.ELM原理 ELM基础原理请参考:https:…

自学编程的人成千上万,为什么坚持下来的没几个?

在互联网职位薪资水涨船高的现下,越来越多的人都对此跃跃欲试,想要通过学习进入这个新兴的朝阳行业。但或因为现下工作,或因为各种压力,多数人并不能果断投入,自学成了常见的学习方式! 但是据数据显示&…

PDF翻译怎么操作?教你几个PDF翻译的技巧

当你在查阅国外资料的时候,有没有发现很多资料都是以PDF格式来呈现的?毕竟,PDF文件方便查阅也不易出现格式混乱的状态。但是,这对于英语基础不好的小伙伴就有一定的影响了,而且如果一字一字去翻译解释,那也…

linux安装php环境

linux安装php环境首先,打开终端并更新系统的软件包列表。运行以下命令然后安装 PHP。运行以下命令安装完成后,可以使用以下命令检查 PHP 的版本:如果您需要使用 PHP 的扩展,可以使用以下命令安装它们:例如,…

[2]MQTT基础知识

MQTT(消息队列遥测传输)是一个客户端服务端架构的发布/订阅模式的消息传输协议。 MQTT协议最初版本是在1999年建立的。该协议的发明人是的Andy Stanford-Clark和Arlen Nipper。 MQTT协议是当今世界上最受欢迎的物联网协议,广泛应用于车联网、智能家居、即时聊天应用…

自学Python学习经验分享

学编程语言有个小秘诀,直接上项目就是干,做完之后你就是Pythoner了。 不要怕没基础,边做边学边查,进步很快的。 因人而异,一周或一个月就能基本入门,当然也需要你百分百的投入。 以前我也觉得收集资料、钻…

一个新工具引发IT巨变:程序员在转行,不懂编程的人却成了程序员

编程一定需要代码吗?我看未必。 科技进步可谓日新月异,无代码开发在近几年,俨然被越来越多的人所熟知。这是一场解放码农的运动,让不懂编程的人也能进行软件开发。 我在发文前,看到了一则信息,更加坚定了…

【MySQL】MySQL初级笔记

MySQL1、初识MySQL(了解)1.1、为什么学习数据库1.2、什么是数据库1.3、什么是DBMS1.4、MySQL简介1.7 连接数据库1.8 基本操作2、操作数据库2.1、结构化查询语句分类2.2、数据库操作2.3、数据值和列类型数值类型字符串类型日期和时间型数值类型NULL值2.4、数据字段属性(重点)UnS…

SpringBoot配置文件的加载顺序

一、引言 如果我们了解SpringBoot配置文件的加载顺序,对项目的开发和部署会有很大的帮助。举个工作中的例子,我们的项目是微服务架构模式,用Nacos做注册中心(可以配置每个微服务),所有服务请求需要通过网关…

解决PageHelper版本不匹配,结果可能全部返回问题

1.问题: 使用 pagehelper ,如果和mybatis版本不匹配,就会出现返回结果错误问题,比如:本来想返回pageNum:1,pageSize:1的数据,但却是全部返回。自己的代码没问题的情况下&#xff0c…

无向图以及图的java代码实现

1. 图的定义 定义:图是由一组顶点和一组能够将两个顶点相连的边组成的 1.1特殊的图 自环:即一条连接一个顶点和其自身的边;平行边:连接同一对顶点的两条边; 1.2图的分类 按照连接两个顶点的边的不同,可…

含文档+PPT+源码等]精品基于SSM的图书管理系统[包运行成功]

博主介绍:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 含文档PPT源码等]精品基于SSM的图书管理系统[包运行成功] 系统介绍 《基于SSM框架图书管理系统开发与设计》 该项目含有源码、配套开发软件、软件安…