实践干货 | CodeWave如何支持多人协作开发应用

在传统软件开发领域里,要完成具备一定复杂程度的软件,通常都会由一个研发团队协作开发。软件复杂度越大,研发团队的规模也就越大。

为了让研发团队能够高效的进行协同开发,业务引入了优秀的代码版本管理工具,比如传统软件开发主流使用的代码版本管理工具是Git和SVN。

与此同时,新兴的零代码、低代码开发方式也正在快速崛起。

无论是国内阿里的宜搭和腾讯的微搭,还是软件巨头微软Power Apps和曾估值接近百亿美元的OutSytems,都已经在软件开发领域里占据了越来越重要的位置。

在国内市场,相比于定位在服务钉钉、微信生态的宜搭和微搭,网易数帆CodeWave智能开发平台直接定位在支撑企业自身数字化转型的软件生产全链路创新,一方面能够支持复杂的个性化软件应用高效搭建,另一方面还能够支持SaaS、本地部署和源码导出,贴合各类客户的部署需求。

针对大型软件开发,CodeWave设计了一整套完善的多人协作能力。通过这些设计,使用过Git/SVN的用户,可以直接把已有的能力和经验复用过来;而没有传统开发多人协作开发经验的新用户,基于低代码本身低门槛的特点,也可以快速直接上手进行协作。

d9244909057d1197a02451f174c6a974.png

产品生命周期不同阶段的多人协作模式

阶段1:产品从0-1开发

一个软件在刚开始开发时,并不存在线上稳定版本的代码运行问题。我们往往只需要考虑一个代码主分支,多位开发者在一个主分支上进行代码推拉合并,进行协作开发。

5169d1568b507cabd3f00e6a2e452f65.png

阶段2:产品已上线

当软件的1.0版本开发完成后,通常我们会在代码主分支上打一个版本标记(tag),然后将1.0版本的代码发布上线。

后续有了新的项目需求,我们就需要针对这个项目拉取一个专门的开发分支,开发者在这个开发分支上继续进行协作开发,和在主分支上的协作模式类似。

那么为什么需要拉取开发分支呢?主要有几点考虑:

  1. 确保主分支的代码质量。新项目开发的过程代码肯定是无法持续保证质量了,必须要在开发分支上完成开发和测试验证,才可以合并回主分支。

  2. 确保线上产品的运维和新功能开发可以并行。由于软件1.0版本已经在线上运行,难免不会出现bug需要紧急修复。这样我们可以直接在主分支上快速的修复bug,而不受到开发分支代码的影响。

  3. 如果有多个项目需要并行开发,还可以再从主分支上拉取不同的项目开发分支,以确保多项目的并行开发,且代码相互隔离,互不影响。

这也是目前大型互联网公司主流的协作开发模式。

ef09b08b2c74009f884b1782ad62c00e.png

阶段3:产品多版本并行

传统软件行业以本地部署交付为主,随着市场发展到一定阶段,产品需要面向不同大客户交付不能兼容的功能。这些情况在前期不可预知,架构设计上难以覆盖。最终,产品会被分化成多个不同的客户定制分支版本。

这种情况比较复杂,也往往会存在很长时间。笔者曾经在诺基亚早期支撑2G/3G的软件平台上维护过类似产品。

在这种情况下,产品往往要专门引入一类角色——SCM(软件配置管理工程师),来专门对代码版本进行维护,基于每个定制版本的生命周期建立一套复杂的代码合并规则。

比如,在A分支里发现的bug,需要在B和C分支单独再修复一遍,D分支已经宣布停止维护,就不需要再修复了。

b3dbb15a15e02464d0ce149a838ca437.png

d0240eb11626c98e4ebb1be650d7e863.png

CodeWave多人协作的特色设计

为更好地支撑以上三种情况下的软件协作开发,网易数帆在CodeWave智能开发平台实践中,在代码管理和代码合并两个方面分别采用了如下特色设计。

代码管理

副本隔离

和传统开发不同,CodeWave是基于B/S结构的web端IDE,软件代码并未以一个个文件的形式存放本地电脑里,而是以NASL(NetEase Application Specific Language)格式保存在服务器上。

每位开发者可以在同一个应用下创建属于自己的副本,就相当于给自己创建了一个云端的工作空间。副本隔离则支持将每位开发者的开发环境隔离开来,确保了各自代码的安全性。

副本可以拉取分支代码库上的代码,进行代码合并,并将合并后的代码推送到代码库里,这样就完成了多人协作。

多分支合并

除了主分支外,CodeWave支持创建自定义的开发分支。

副本可以切换到开发分支上进行代码合并和推送,以完成多代码分支下的协同开发。

54e98c047f2234b7f7af0b539fbf1933.png

应用模版支持代码复用

CodeWave还支持了给将开发好的应用导出成模版,并且给予模版创建新的应用。通过模版,一个应用就可以复制成多个隔离的应用,这样就可以满足不同客户定制版本的软件长期升级与维护。

f79fec4abf01e73bd092fc3df9014652.png

代码合并

有协作经验的开发者都清楚,代码合并是一项非常重要,同时又很耗费精力的工作。

CodeWave结合低代码本来的开发特性,设计了业界领先的代码合并能力支撑。

组件粒度的代码合并

在开发公共页面时,不可避免会存在多个开发者协作修改同一个页面的情况。

为此,CodeWave设计了页面组件级的细粒度的合并能力,使得多位开发者可以精细化的进行代码合并拉取,最大化满足各类灵活的协作开发场景。

54ea0cec2422509b2461296422d0a471.png

所见即所得的冲突解决

低门槛一直是低代码开发相对于传统代码开发的一大优势,这一优势很大程度上来自于“所见即所得”的方式。而对于代码合并过程中可能出现的代码冲突,CodeWave也采用了这种方式来解决。

简而言之,在CodeWave上,通过本地和远端代码的点选,开发者可直接在页面上实时看到选择的效果,并通过直观的对比,更加高效地完成冲突解决。

537d790d3153bbbc277d9d63d4425d77.png

00c1107d8f0bc6e606efcb7f85ae0814.png

4251603676e8eca248fe440be8ec784e.png

在功能之外

汝果欲学诗,功夫在诗外。多人协作开发从来都不只是一个软件功能的问题,更多的是一个软件开发项目管理能力。因此,项目管理也是低代码开发必须狠下功夫的领域。

项目管理的方法,已从最初的瀑布式开发进化到当今主流的敏捷开发。

而即便是敏捷开发框架也已经从满足10人团队的Scrum,演化到支撑更大规模研发团队的LeSS (Large Scale Scrum)和SAFe (Scaled Agile Framework)。

本文不去介绍项目管理方法,而是就多人协作开发里最关键的事项做一些提炼:

先做好架构设计

无论是传统软件开发还是低代码软件开发,架构设计都是必不可少的。没有良好的架构设计就进入开发,结果就只是无休止的bug和返工。

通过低代码进行软件开发之前,最主要关注几点:

  • 做好数据建模。在开发之前一定要先做好数据建模,把底层的数据结构,表结构都确认好。后续所有的技术设计方案都应该建立在良好的数据机结构基础上,一方面在能够做出良好的技术设计,另一方面也避免了开发过程中过于频繁的进行表结构变更,带来更大的影响。

  • 高内聚和低耦合的功能模块划分。功能模块的功能内聚,边界清晰,不仅仅开发起来效率更高,还能够为上线后的升级带来长久的收益。毕竟我们做的每一个应用,都希望能够有更长的生命力。

  • 人员分工职责清晰,和功能模块关联。虽然CodeWave提供了所见即所得的代码冲突解决能力,解决代码冲突依然是个有可能会犯错的事情,所以最好的冲突解决方案就是预防冲突。在有了良好的数据建模和功能模块划分后,我们就可以将功能模块清晰的指派到人,降低多人同时开发一个功能/页面的概率,也就是降低冲突产生的概率。

开发过程中的重要事项

在软件开发过程中,我们需要注意以下几个重要事项:

  1. 做好代码备份。在开发过程中,定期进行代码备份是非常重要的。这样可以在意外情况下恢复代码,并保证代码的安全性。

  2. 高频提交代码。频繁地提交代码是保证团队协作顺利进行的关键。通过高频提交代码,可以及时发现问题并解决小冲突,避免大冲突的发生。同时,提交的代码也可以配合自动化测试,及早发现潜在的问题。

  3. 在副本上进行开发,在主应用上拉取代码和发布。多副本应该在同一个代码分支上协作开发,而主应用只专注于更新代码和发布制品应用。这样可以确保代码的统一性和发布的稳定性。

  4. 仔细处理冲突。当出现代码冲突时,我们需要仔细查看代码差异,认真处理。如果有疑问,一定要和相对应的开发者沟通确认。避免图省事的代码合并,给后续带来更大隐患。

321bcfff40a50eaba4fac83816af40be.png

One More Thing

网易数帆CodeWave智能开发平台定位于企业级智能开发平台,基于网易玉言NL2NASL领域大模型,现已支持自然语言编写代码、自然语言写SQL、代码解读等智能能力,并且更多AI加持的辅助多人协作的能力也已经在路上了。

网易数帆CodeWave智能开发平台将持续把AI能力全面集成到软件开发的全流程里,进一步加强企业数智化的产品支撑能力。

敬请点击“阅读原文”了解详情!

作者简介:何少甫,网易数帆CodeWave资深产品经理,多年B端经验,现主要负责CodeWave AI智能编程、NASL语言编程实践相关的产品规划与设计。

bd1cedaefccdbd007933a64a473747dc.png

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

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

相关文章

C语言union联合体(共用体)

一、定义 联合体(共用体)是一种特殊的自定义的数据类型,它包含一系列的成员变量,这些成员变量共用一块内存空间。 语法: union 标识符 { data_type 标识符1; data_type 标识符2; . . . dat…

【数组Array】力扣-5 最长回文子串

目录 题目描述 题解labuladong 题目描述 给你一个字符串 s,找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。 示例 1: 输入:s "babad" 输出:"bab"…

在javaweb项目中resource目录和webapp目录的区别

resource存放的是一些配置文件,这些文件一般都是与java代码相关的配置文件,比如这里的jdbc配置文件,在java中可以使用这个目录下的文件,不用写全路径 webapp存放的是web的资源文件,如jsp,html,css,js文件,在网页请求会…

【NSX-T】5. 搭建NSX-T环境 —— NSX架构基础配置

目录 5. 准备 NSX 基础架构5.1 准备工作5.2 创建传输域(1)创建 Overlay 传输域(2)创建 VLAN 传输域 5.3 创建 IP 池5.4 准备 ESXi 主机 参考资料 5. 准备 NSX 基础架构 5.1 准备工作 vCenter 中已存在 DVS。 为 NSX-T 创建两个 …

计算机毕业设计 基于Web的城市旅游网站的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

ARM I2C通信

1.概念 I2C总线是PHLIPS公司在八十年代初推出的一种串行的半双工同步总线,主要用于连接整体电路2.IIC总线硬件连接 1.IIC总线支持多主机多从机,但是在实际开发过程中,大多数采用单主机多从机模式 2.挂接到IIC总线上,每个从机设备都…

现代雷达车载应用——第2章 汽车雷达系统原理 2.4节 雷达波形和信号处理

经典著作,值得一读,英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 2.4 雷达波形和信号处理 对于连续波雷达来说,波形决定了其基本信号处理流程以及一些关键功能。本节将以FMCW波形为例,讨论信号…

EasyRecovery2024苹果电脑mac破解版安装包下载

EasyRecovery是一款操作安全、价格便宜、用户自主操作的非破坏性的只读应用程序,它不会往源驱上写任何东西,也不会对源驱做任何改变。它支持从各种各样的存储介质恢复删除或者丢失的文件,其支持的媒体介质包括:硬盘驱动器、光驱、…

VS Code串口监视插件Serial Monitor

文章目录 初步使用参数设置VS Code插件 初步使用 Serial Monitor,即串行监视器,提供串口和TCP协议的通信监控功能。在插件栏搜索安装之后,按下Ctrl打开终端,终端界面会多出一个串行监视器选项卡,进入之后,…

golang反射(reflect)虽爽,但很贵

标准库 reflect 为 Go 语言提供了运行时动态获取对象的类型和值以及动态创建对象的能力。反射可以帮助抽象和简化代码,提高开发效率。 但是使用反射势必会多出大量的操作指令,导致性能下降 案例 字段赋值方式对比 type Student struct {Name string…

如何使用 Redis 快速实现分布式锁?

本文我们来讨论如何使用 Redis 快速实现分布式锁。 分布式锁有很多种解决方案,前面简单介绍过,Redis 可以通过 set key 方式来实现分布式锁,但实际情况要更加复杂,比如如何确保临界资源的串行执行,如何及时释放&#…

用Flask搭建简单的web模型部署服务

目录结构如下: 分类模型web部署 classification.py import os import cv2 import numpy as np import onnxruntime from flask import Flask, render_template, request, jsonifyapp Flask(__name__)onnx_session onnxruntime.InferenceSession("mobilen…

Tomcat部署Activiti官方 流程设计器【数据库更换为Mysql !!!】

一、官网下载activiti6 解压后结构如下: database: 存放数据库对象相关脚本,包含不同的数据库脚本 libs: 包含activiti开发过程中需要用到的jar包和源码,不建议通过jar包直接引用,建议通过maven进行管理 wars&am…

大模型应用_FastGPT

1 功能 整体功能,想解决什么问题 官方说明:FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!个人体会…

ubuntu将本机的wifi网络通过网线分享给另一台机器(用于没有有线网络,重装系统后无wifi驱动或者另一台设备没有wifi网卡)

1.将两台机器通过网线连接 2.在pci ethernet中设置选择另一台机器的mac address,ipv4中选择share to other computer,另一台机器上设置为动态ip,连接上之后另一台机器即可上网。

大数据机器学习深度解读DBSCAN聚类算法:技术与实战全解析

大数据机器学习深度解读DBSCAN聚类算法:技术与实战全解析 一、简介 在机器学习的众多子领域中,聚类算法一直占据着不可忽视的地位。它们无需预先标注的数据,就能将数据集分组,组内元素相似度高,组间差异大。这种无监…

Github 2023-12-14开源项目日报 Top10

根据Github Trendings的统计,今日(2023-12-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目5TypeScript项目2JavaScript项目1Jupyter Notebook项目1PHP项目1 基于项目的学习 创建周期&a…

Python进阶(一)

1.Python中一切皆对象 1.1 Python中一切皆对象 JAVA中有class和object这两个概念,object只是class的一个实例。 而在Python中面向对象更加的彻底,class和函数都是对象。代码也是对象,模块也是对象。 函数和类也是对象,对象有四…

AUTOSAR_SWS_LogAndTrace文档中文翻译

1 Introduction and functional overview 本规范规定了AUTOSAR自适应平台日志和跟踪的功能。 日志和跟踪为AA提供接口,以便将日志信息转发到通信总线、控制台或文件系统。 提供的每个日志记录信息都有自己的严重性级别。对于每个严重级别,都提供了一个单…

bugku--source

dirsearch扫一下 题目提示源代码(source) 也就是源代码泄露,然后发现有.git 猜到是git泄露 拼接后发现有文件 但是点开啥也没有 kali里面下载下来 wegt -r 下载网站的所有内容 ls 查看目录 cd 进入到目录里面 gie reflog 引用日志使用…