框架的 FlatBuffer 架构设计

FlatBuffer schema design for frameworks

我正在寻找有关为框架构建 FlatBuffer 模式的建议,该框架允许用户扩展框架定义的数据类型,但也允许框架开发人员在发布新版本的框架时添加新字段。

我最初的想法是,当你使用这个框架创建一个项目时,它会生成几个 FlatBuffer 模式文件,然后你可以为你的特定项目编辑这些文件。然后您可以编译模式并开始使用框架 API 开发代码。

但是,当框架开发人员决定将字段添加到基本类型时,这就会成为一个问题。您可能知道,FlatBuffers 要求将任何附加字段附加到末尾(或者至少具有比其他字段更高的 ID)。所以框架开发者和框架用户的添加之间存在冲突。

一个可能的解决方案是拥有一组 'non-user-extensible' 类型,这些类型由框架创建者拥有,不应由框架用户修改;然后这些类型将嵌入到框架用户定义的数据类型中。但是,考虑到字段大小更改的限制,我不确定这是否可行。

如果事实证明没有其他好的解决方案,我也愿意听到使用平面缓冲区的替代方案。

要拥有这样的开放式扩展,您真的应该让框架作者和用户在两个独立的 tables 中工作......其中一个可以拥有另一个。如果所有贡献者都没有在源代码管理中共享模式,则没有扩展单个 table 的好方法。

如果出于某种原因这些扩展必须在单个对象中,那么 Protocol Buffers 比 FlatBuffers 更灵活,因为它不需要相邻的字段 ID。例如,您可以简单地说所有 >=1000 的字段 ID 都是针对框架用户的。

回想起来(两年后回答我自己的问题),FlatBuffers 似乎不是我用例的正确选择。这些天我使用了 msgpack(在我关心字节大小的情况下)和 JSON(在我不关心的情况下)的组合,我对每个都非常满意。