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

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

引言

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

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

协议原文:https://lowcode-engine.cn/lowcode[1]

低代码引擎官网:https://lowcode-engine.cn/index[2]

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

为什么要做多人协同

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

image.png

现在有什么问题

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

  • 当一个页面的开发任务拆分给了两名同学,就只能一人开发完之后,另外一个同学才能进行开发;
  • 当开发的过程中,突然需要修复线上问题,就需要回滚完成修复后,再重头开发新的需求;
  • 当多功能并行开发时,就需要复制多份页面,最后再人工进行 schema 合并;

image.png

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

  • 不支持并行开发。导致开发人员的闲置,限制了开发时长和协同方式。
  • 不支持迭代模式。不具备隔离性,无法支持复杂应用生命周期的迭代需求,尤其对于快速迭代升级的业务,导致迭代成本非常高。
  • 无法合并修改。复杂、无规范的手动合并流程,只有对协议很熟悉的专业人士才能操作,导致合并和验证成本提高。

问题分析

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

  • 如何“协同”?

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

  • 如何实现多版本?

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

  • 如何控制开发复杂度?

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

怎么做多人协同

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

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

image.png

  • 削弱:

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

  1. 通过微前端,将大型应用拆分,通过独立发布功能的小应用来构建大型应用;
  2. 拆分组件:抽象更多业务垂直的能力,区分模块开发。这样同一页面就可以拆分为多个模块,由不同的开发人员开发,也提高了复用性和封装性
  • 硬刚:

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

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

如何实现

平台背景

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

  • 研发流程

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

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

image.png

image.png

当前效果

在系列文章的前篇中,也对研发流程做出了探讨。可见《关于 LowCode&ProCode 混合研发的思考

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

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

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

  • 低代码组件 + 物料描述(优先使用)
  • 这里低代码组件指的是:通过可视化的拖拽、配置的方式生产的组件,具备与 react 源码组件同等的能力。
  • 源码组件 + 物料描述:
  • 参考低代码引擎开源项目中提供的组件形式。

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

  • 迭代管理:多分支模式

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

image.png

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

技术实现

方案设计

1. 依靠 Git 实现迭代管理

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

image.png

2. 简单的分支策略

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

  • 仅有一条 master 作为主干,所有的分支创建都从 master 复制拉取;
  • 发布日常时,需要合并 Master 的修改;
  • 发布线上后,分支并入 Master 后删除。

image.png

创建应用

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

创建迭代

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

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

image.png发布日常

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


image.png

转码方案

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

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


image.png

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

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

image.png

发布线上

  1. 发布线上前检查: 主干是否有更新,是否完成评审等
  2. 应用打包 & 构建
  3. [Git] 开发分支合并到 Master
  4. [DB] 迭代应用覆盖线上应用数据

拓展能力

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

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


image.png

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

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

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

可视化多分支协同

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

  • 看不懂:普遍反馈看不懂冲突解决困难,不能理解 DSL 中的属性;
  • 割裂感:从低代码平台跳转到 WebIDE 去编辑代码,不符合低代码操作直觉;
  • 不可控:自动合并后发布时,对于有什么改动合并结果没有把握;

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

  • 可视化 Diff:使用可视化的 Diff ,帮助用户确认发布线上前的改动点;
  • 可视化 CR:评审者可以可视化得看到开发者所有的修改,更好的做上线前的判断;
  • 可视化 Merge:可以通过点选选择保留的冲突。

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

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

image.png

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

image.png


相关文章
|
Web App开发
在 HTML 中禁用 Chrome 浏览器的 Google 翻译功能
在 html 标签中添加 translate=“no” 属性,浏览器将不会翻译整个页面。
1059 0
|
数据采集 PyTorch 数据处理
Pytorch学习笔记(3):图像的预处理(transforms)
Pytorch学习笔记(3):图像的预处理(transforms)
2389 1
Pytorch学习笔记(3):图像的预处理(transforms)
|
4月前
|
数据采集 数据可视化 程序员
为什么总有人说低代码不行?
低代码技术通过可视化组件和模块化开发,有效解决企业IT资源不足、开发成本高和需求变化快三大痛点。其优势在于快速开发、降低技术门槛和统一技术栈,但存在灵活性受限、性能不足和供应商锁定风险。低代码特别适合快速原型验证、企业内部应用和业务流程自动化等场景。企业应理性评估其适用性,将其作为数字化转型的高效工具。
|
7月前
|
JSON 前端开发 JavaScript
前后端对接的常见问题、解决方法及实战心得
本文总结了前后端对接中的常见问题,如接口文档不清、返回格式不统一、参数错误、跨域等,并提供解决方法与实战协作建议,助力高效开发联调。
|
人工智能 数据可视化 大数据
为什么甘特图是项目管理中的“必备神器”?
甘特图是项目管理的核心工具,通过时间线直观展示任务的开始、结束时间和依赖关系,帮助团队清晰了解项目全貌,及时发现进度风险并调整资源。其核心功能包括时间线可视化、任务分解与优先级排序、进度追踪及团队协作。结合板栗看板等工具,甘特图能进一步提升项目管理的效率和灵活性,适用于各类团队和企业。未来,甘特图有望与人工智能、大数据等技术结合,实现更智能化的管理。
|
算法 Unix Linux
深入理解Linux内核调度器:原理与优化
本文探讨了Linux操作系统的心脏——内核调度器(Scheduler)的工作原理,以及如何通过参数调整和代码优化来提高系统性能。不同于常规摘要仅概述内容,本摘要旨在激发读者对Linux内核调度机制深层次运作的兴趣,并简要介绍文章将覆盖的关键话题,如调度算法、实时性增强及节能策略等。
|
存储 移动开发 JavaScript
React18组件一键转换Vue3组件(持续更新中)
其实现在Vue也是很火的框架随着Vue3的诞生,博主其实最终目标是想整合一套React+一套Vue组件库在一起的,但是重写一遍React的组件很费工作量也不现实,因为我是单人开发,于是就萌生了写一个React组件转换Vue组件的工具,功能性将逐步开发更新到博客,喜欢的可以关注一下
1284 1
React18组件一键转换Vue3组件(持续更新中)
|
测试技术 开发工具 git
掌握 Git 分支策略:提升你的版本控制技能
在现代软件开发中,版本控制至关重要,Git 作为最流行的分布式版本控制系统,其分支管理策略对于高效协作和代码维护尤为重要。本文介绍了几种常用的 Git 分支策略,包括主线开发模型、功能分支模型、Gitflow 工作流和 Forking 工作流,并探讨了如何根据项目需求选择合适的分支模型。通过保持 `master` 分支稳定、及时合并清理分支、使用命名规范、利用 Pull Request 进行代码审查及自动化测试等最佳实践,可以显著提升团队协作效率和软件质量。掌握这些策略将帮助开发者更好地管理代码库,加快开发流程。
|
运维 负载均衡 监控
探索微服务架构下的服务网格(Service Mesh)实践之路
【8月更文挑战第30天】 在当今日益复杂的分布式系统中,微服务架构已成为众多企业解决系统扩展与维护难题的利器。然而,随着服务的不断增多和网络交互的复杂性提升,传统的微服务管理方式开始显得力不从心。服务网格(Service Mesh)作为一种新兴的解决方案,旨在通过提供应用层的网络基础设施来简化服务间通讯,并增强系统的可观察性和安全性。本文将分享我在采用服务网格技术过程中的经验与思考,探讨如何在现代云原生环境中有效地实施服务网格,以及它给开发和运维带来的变革。
|
Web App开发 缓存 前端开发
前端RAG:使用Transformers.js手搓纯网页版RAG(二)- 基于qwen1.5-0.5B
本文继续探讨了RAG的后半部分,通过在浏览器中运行qwen1.5-0.5B模型实现了增强搜索全流程。然而,由于浏览器与模型性能限制,该方案更适合研究、离线及高隐私场景。文章提供了完整的前端代码,让读者能够动手尝试。此外,详细介绍了代码框架、知识库准备、模型初始化及问答实现等步骤,并展示了实际运行效果。受限于当前技术,除非在离线或高隐私环境下,网页大模型的应用仍需进一步优化。
804 0

热门文章

最新文章