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

2023-12-14 09:12

本文主要是介绍实践干货 | 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

这篇关于实践干货 | CodeWave如何支持多人协作开发应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/491943

相关文章

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

MySQL 中 ROW_NUMBER() 函数最佳实践

《MySQL中ROW_NUMBER()函数最佳实践》MySQL中ROW_NUMBER()函数,作为窗口函数为每行分配唯一连续序号,区别于RANK()和DENSE_RANK(),特别适合分页、去重... 目录mysql 中 ROW_NUMBER() 函数详解一、基础语法二、核心特点三、典型应用场景1. 数据分

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实