将Protobuf标签号用于自定义绑定是否属于反模式?
关于Protobuf在SDUI场景中标签号绑定方案的咨询
背景与方案概述
我们公司正在开发服务端驱动UI(SDUI)服务,所有客户端(iOS、Android、Web)与后端的API均基于Protobuf模型,因此计划将Protobuf用于SDUI场景。
我们的架构设计是:搭建独立服务向客户端提供需渲染的视图结构,客户端仅缓存UI样式与布局;由另一服务提供业务数据,最终将数据绑定到视图结构。客户端仅知晓后端响应为Protobuf数据,不清楚其具体Schema,且视图结构与后端数据采用同类型的Protobuf模型。
模型示例
视图结构的Protobuf定义与示例:
message Text { string label = 1; Color color = 2; } message VerticalStack {} message HorizontalStack {} /// 典型视图结构的Protobuf表示 VerticalStack { spacing = 20pt children = [ Text { id: 11 color: .white } HorizontalStack { children: ... } ] }
后端数据响应示例:
message BackendResponse { Text productTitle = 11; }
当前绑定方案
我们提出通过Protobuf标签号实现视图与数据的绑定:例如视图中Text.id = 11对应后端响应里BackendResponse.productTitle的标签号11。目前已构建自动生成工具,确保视图结构与后端响应使用一致的标签号。客户端通过递归解析视图结构获取id(即对应的标签号),再从后端响应中匹配对应标签号的数据,最终将数据与视图合并渲染。
核心疑问
- 该方案虽不常见,是否属于Protobuf使用反模式?
- 能否通过Protobuf的扩展或自定义选项优化此方案?
- 是否存在更合适的SDUI+Protobuf实现方式?
技术栈补充
- 绑定标签号跨多技术栈使用:视图Protobuf为客户端(Swift、Kotlin、TypeScript/JS)、后端(Go)、DSL仓库(TypeScript)共享;后端模型仅为后端、DSL仓库所知。
内容的提问来源于stack exchange,提问作者Yan Zaitsev
相关产品推荐
相关产品推荐

