“组装式应用”是连续两年入选Gartner技术趋势报告,被列入技术领域的重要战略技术趋势,该技术的发展并非技术炒作,而是市场的真实需求。我理解组装式应用体现了快速交付,极致复用,稳定安全的技术理念,使技术和业务团队可以更敏捷、更有效地重用代码,大幅降低产品的开发门槛。
本文将介绍一下优酷客户端在组装式开发上的设计和实践。
根据组装式开发的定义,其核心是被称为“封装的业务能力(Packaged Business Capability,PBC)” 的一种软件定义的最小化业务功能。其考量维度包括了模块化、可发现、自治、可编排四个方面。
优酷客户端是一个面向消费者的视频类应用,业务流程可以分为分发和消费两个主要环节。而这些环节从交互的角度上看,又可以分为有交互界面和无交互两种。优酷客户端在组件化封装业务能力的时候,从设计上采取了分而治之的思想。对于有交互界面组件(本文中又称为UI组件),使用了标准化渲染架构来进行组件的模块化,可发现,自治和可编排。对于无交互界面组件(本文中又成为服务组件),则使用了标准化服务框架来完成组装式开发。
对有交互界面组件,UI的变化通常会非常频繁,布局、颜色、流程、交互方式都可能发生变化,而这一部分往往是应用开发过程中重头戏。所以如何进行组件化,并形成能复用又好用的组件池来快速搭建有自己产品或设计特点的应用,需要精巧的架构设计。优酷客户端将这部分组件设计拆分为设计标准化,容器标准化,协议标准化,组件开发标准化等部分来进行组装式开发的打磨。
设计标准化要解决的核心问题是单产品场景下视觉风格不统一,和在多产品/多模式下视觉适配成本高的问题。我们当时对优酷几百个组件产品进行了梳理,归纳形成了有限的集合,并对这些集合进行了命名,即Design Token。Design Token分为静态,动态,语义化,三个阶段,分别适合不同的需求。Design Token涵盖了属性,控件,组件多个维度,图中这些都是Design Token。在设计侧,我们通过形成设计规范,将Design Token与标准化对应起来。设计在开发时,只能进行符合规范的设计,而开发在开发时,也只能通过Design Token去获取值和对象。这就形成一种统一的设计研发语言。在实际工作中,为了保证这个标准化过程,我们还开发了专门的设计平台来工程化。而一整套Design Token对应的值,就是一个策略。我们可以在页面启动时切换策略,从而整体改变呈现的效果。结合不同平台的响应式SDK进行产品化后,就对应了优酷车机,优酷pad等多种产品形态。
组件是存在于容器中的,所以标准化组件,必须标准化容器。我们对容器的核心流程进行了抽象,对关键能力进行了封装,同时也对容器级别的业务需求进行规范。核心流程则是组件配置的读取,组件的各种布局,组件中各模块的创建,以及组件的渲染上屏。对上述过程涉及的通信,数据存储,局部刷新和分页加载,错误状态处理等也进行了封装。
协议标准化则是将组件的数据输入进行了规范化,优酷将页面进行领域模型的建模,对每一级领域涉及的各类数据进行规范化的定义,领域模型节点的无限嵌套可以适配各种场景,而每一级相同的规范保证了逻辑的可预期可复用性。
通过将组件外部依赖的插脚逐一打磨,可复用又好用的组件池就是水到渠成的了。优酷客户端将UI组件按产品形态进行了划分,内部使用MVP结构,做到了比组件更细粒度的复用,也更好适应不同场景的定制化需求。组件功能完整性,体现在任何一个组件在容器中都可以完成交互,并且和其所在的容器在视觉上完美适配。组件自身完美自洽,可以独立接收数据源,也能够独立完成交互背后的功能实现。UI组件采用了json注册的方式进行发现,可用根据编排结果进行展示。
标准化服务框架将某一类服务封装为一个组件,使用协约的方式对外暴露能力,并在模块内部将协约和实现分离,即协议可以实现也可以不实现,随时可以替换不同的实现。通过自注册方式来进行服务组件的注册,服务组件之间,服务组件和UI组件之间都通过协约来进行调用,一个组件不会直接去查另一个组件的数据,也不会直接去调用另外一个组件的内部方法,确保组件自治。在编排上,设计了自动化编排的方式,即根据调用关系,自动将组件打包集成。
伴随组装式应用而来,往往还有低代码/无代码开发这一流行概念。可以让程序设计者及一般用户不用传统程序设计语言即可以开发应用程序的开发平台,使用的是图形用户界面以及配置。优酷的组装式应用开发体系也向运营提供了图形化的页面组装平台。
好的经验是可以复制的。优酷客户端组装式应用开发架构已经在阿里的淘票票,大麦,小小优酷,来疯等多个应用进行了复用,形成了公共组件池,提高了整体的组件化水平。
目前该架构已经完成外部接入准备,也希望借助云巧等平台可以让更多的开发者了解到。