作者:庄静本文主要讲述网易云音乐前端团队在构建模型化研发场景低代码系统的思考与实践。本文将从目前我们面临的业务研发问题出发,谈谈我们对构建低代码研发体系的思考,然后介绍我们正在构建的支持LowCode和ProCode在线研发的在线快速研发能力。业务研发情况先来看看我们的业务情况。随着业务的快速发展,涌现出一大批平台化产品,其中涉及公共技术、质量保障、数据智能等平台40余个。此外,还有云音乐大师站、看直播、音界等一大批CMS平台。和各种网络应用程序。而且,这个数字还在增加。另一方面,CMS平台和活动页面都具有明显的模式特征。这意味着开发者面临的大量开发需求实际上是重复的、相似的。我们研发的现状是:大量的业务需求和低效的研发吞吐之间的矛盾。我们不妨从不同的角度来看一些对研发现状的看法:产品同学经常抱怨:只是改文案,前端却需要排队2周,合并后的需求发布,怎么会这么低效;后端同学经常遇到:一些内部系统体验不好。改UI,得找前端资源调度,前端没资源做;而前端同学面临的是:业务需求很多,每个需求都很紧急,简单重复的需求,没有设计稿,我很难在技术上成长!这里我做了一个简单的数理统计。中后台前端人均支持3.3个平台,平均投放周期2周左右。右图是Muse平台第20期的需求列表。你会发现,大量的需求都是“改副本”、“增加字段”等琐碎的细节,但这些问题都需要多方协作,按计划开发。在业务快速发展的应用开发困境中,为什么会出现这样的问题?在我看来,业务快速发展中应用开发的困境可以从四个方面来破除:首先是人员。一方面,人员流动不可避免。另一方面,全栈开发人员非常稀缺。二是变化,因为需求总是在变化,迭代周期越来越短。第三是复杂性。一方面,技术体系越来越复杂,另一方面,研发依赖也越来越复杂。第四个是脱节,一方面是需求和开发交付的脱节,另一方面是长流程和快速交付的脱节。从专注应用开发到专注业务交付应该如何应对?我的想法是,一线开发人员需要“从关注应用开发过程转向关注业务交付过程”。我认为传统的业务开发过程是一个线性的应用开发过程。需要经过需求沟通、开发测试、发布部署等几个环节。这个过程往往依赖于多工种在不同环节的专业分工,因此存在较高的沟通协作成本。而开发者会过分关注灵活、去中心化的本地开发工具和复杂的Web应用架构,从而忽视了业务交付本身。在我看来,理想的开发流程应该是非线性的,可以快速响应业务变化,各种研发角色可以使用低代码的方式低成本地介入交付流程。这依赖于标准化和集成化的快速研发能力,以及更轻量级和可控性的Web应用架构。云音乐在线研发快速交付系统就是基于这样的思考,大家一致认为有必要构建研发快速交付系统来应对业务变化。通过该系统,我们可以有效地对接公司现有的设计规范、开发模型、开发工具、基础研发设施等。因此,我们在云音乐技术中心设立了“TangoLowCode”项目。探戈是一种优雅的双人舞,隐喻我们致力于为业务研发交付带来的全新体验。CloudMusicTango低代码项目的核心优势包括三个方面:基于源码的可视化构建能力:提供从源码到源码的可视化构建体验,不依赖特定的DSL,也没有专有的构建协议。与前端框架无关,支持LowCode&ProCode双模在线开发能力。与现有研发设施无缝集成,提供一键创建应用和发布部署能力:可部署前端平台,对接版本控制系统Gitlab,充分复用现有素材系统。提供对接合约联调和模型驱动的能力:支持与云音乐现有的合约联调模式对接,在设计器中提供自动联调能力,利用后端元数据中心的应用接口模型信息,建立自动页面生成计划。传统低代码构建方案的劣势在谈云音乐的低代码技术方案之前,我们不妨先分析一下传统低代码构建方案存在的问题:市面上大部分的低代码方案都可以使用下面用图片来描述。核心是将视图逻辑转化为页面描述逻辑,在此基础上构建节点模型和属性模型,然后通过操作和改变模型来修改视图逻辑。这里的问题在于,构建引擎的设计者通常需要在这里先定义页面描述协议,通常以JSON的形式描述。受限于具体的业务场景和开发者的个人喜好,这里的协议设计难度很大。许多不确定因素很容易导致协议不一致和后期维护问题。由于需要与编程语言进行点对点映射,这种私有协议构建方案也难以实现图灵完备。简单总结一下,我认为这种传统的低代码构建方案存在三个明显的缺点:使用私有构建协议导致协议设计成本高、难以长期维护、难以实现图灵完备。依赖特定的DSL解决方案在一定程度上将材料限制为特定的构建解决方案。由于以上两个原因,目前只有单向转码能力。一旦输出源代码,这个过程就不可逆了。对于云音乐基于源码的低代码方案,我们需要重新思考低代码构建的协议设计。我们期望新的构建协议足够通用,易于理解,易于维护,甚至免维护,易于操作,并且能够与无关的前端框架兼容。这时我们想到了AST(AbstractSyntaxTree),它是编程语言源代码的抽象语法树,用来表示源代码结构的结构化描述。对于JavaScript语言,Babel已经为JS语言提供了AST解析和生成能力。借助Babel的工具功能,可以轻松操作和更改源代码节点。因此,在Tango低代码系统的可视化模型构建中,我们采用的核心思想是:将源代码解析成AST,在AST的基础上进一步抽象建立文件模型和节点模型,对拖拽进行改造-drop将视图的配置行为放入以便操作和修改AST,然后将更改后的AST恢复到源代码中。LowCode&ProCode双模式实时切换由于采用了完全基于源代码的低代码构建方案,云音乐内部构建的低代码平台可以提供LowCode和ProCode两种研发模式,用户行为在两种模式可以做到完全对等,用户在设计视图中的行为会实时同步到源代码中,源代码的变化也可以实时反映在设计视图中。借助这种双模切换能力,可以为一些高级场景提供更灵活的在线研发体验,用户在本地创建的源码项目也可以兼容模式在线开发。与现有研发设施无缝集成对于云音乐的Tango低代码系统,在构建LowCode&ProCode混合研发模式的基础上,我们更注重与现有内部研发设施的集成,进一步加快业务研发效率。Tango平台提供了与Gitlab集成的能力,用户的每一次保存操作都会将源码写入Gitlab仓库;提供与研发平台对接能力,一键快速创建应用,一键部署发布应用;提供与素材中心对接能力,快速消费二方、第三方团队中的派对组件包;提供与数据网关的集成能力,使用合约联调方式快速在线生成页面;提供D2C集成集成能力,支持设计稿一键生成代码。合约联调及模型驱动能力云音乐的研发系统建立了合约联调研发模型,提供接口合约及其变更管理、接口自动化Mock能力,并借助于应用提供的基础元数据代码自动化分析中心,可以为Tango低代码平台提供强大的应用数据模型和服务支持。目前,云音乐Tango低代码平台已初步构建了基于合约联调模型的在线自动联调能力,基于应用元数据自动生成建模页面也在推进中。OneMoreThing:基于源码的低码引擎在构建云音乐探戈低码系统的过程中,我们下沉了核心的低码能力,抽象并构建了一个基于源码的低码引擎生态。平台端能力提供更解耦、更易维护的底层解决方案。另一方面,我们通过与多个团队合作,在公司内部构建低代码生态系统。借助Tango低代码引擎,当我们在内部重启一个低代码项目时,只需30行代码就可以轻松完成整个低代码项目的前端实现,开发者可以更加专注在服务集成和用户功能上,大大降低了内部试错成本。总结最后,简单回顾一下我们在云音乐正在构建的低代码研发体系。为应对业务研发过程中的问题和挑战,结合云音乐的业务研发和技术体系现状,我们认为采用低代码的方式构建线上快速研发交付能力,可以有效应对问题建模业务研发场景,简化前端开发流程,赋能各类业务研发角色。为此,我们搭建了云音乐探戈低代码研发体系。本方案完全基于源码方案,不使用私有构建协议,不依赖特定的DSL方案。支持与现有内部研发设施无缝对接,加速模型化业务研发效率。后续我们将继续带来更多关于云音乐低代码能力建设的技术分享。本文由网易云音乐技术团队发布。文章未经授权禁止任何形式的转载。我们常年招聘各种技术岗位。如果你要跳槽,又恰好喜欢云音乐,那就加入我们吧grp.music-fe(at)corp.netease.com!
