gpt4 book ai didi

bond - Microsoft Bond 架构演变最佳实践

转载 作者:行者123 更新时间:2023-12-03 04:27:54 24 4
gpt4 key购买 nike

Microsoft Bond 是否有一些关于架构如何随时间演变的最佳实践?我想确保我们遵循最佳实践,以便我们具有两种方式的兼容性(即允许我们的 Bond 类型将旧版本演变成当前版本,以及向后兼容性允许从较新版本转换回旧版本)。我没有在文档中看到具体解决这个问题(例如 https://microsoft.github.io/bond/manual/bond_cs.html 也不是 https://microsoft.github.io/bond/manual/compiler.html#idl-syntax ),尽管其他序列化框架(例如 Avro)在其文档中明确详细说明了这一点。

就其值(value)而言,我们正在使用 .NET (C#/F#) 进行编写,并打算最初使用 CompactBinaryWriter 和 CompactBinaryReader 格式。

例如,我想象一些这样的指导:

  1. 字段的名称可能会随着时间的推移而改变,因为字段序数用于字段解析,而不是直接使用名称(SimpleJSON 中除外)。我相信这是真的,是吗?
  2. 添加新的“必填”字段需要您为该字段指定默认值
  3. 如果旧版本已分配默认值,则可以删除新版本中的字段
  4. 更改字段类型怎么样?例如,字段可以从版本 1 中的字符串字段更改为版本 2 中的 int64 字段吗?它可以从字符串更改为自定义联合(带有可选字段的自定义类型)吗?
  5. 还有其他建议吗?

谢谢!

如果有针对此类 Microsoft Bond 问题的活跃论坛社区,我也会感兴趣,但我找不到...

最佳答案

我也不知道任何明确的模式演化指南,这肯定是 Bond 文档中的一个空白。根据我自己与邦德的合作,我可以回答您的一些问题:

  1. 是的,字段名称可以更改,对于 CompactBinary 格式来说,重要的是字段序号。
  2. DefaultAttribute 仅对接口(interface)成员有效。您可以添加必填字段而无需进一步注释,但在反序列化旧记录(不包含该必填字段)时,我预计会出现运行时错误。
  3. 您可以删除字段。默认值是通过默认构造函数实例化包含对象并读出相应字段来确定的。但是,如果您删除必填字段,旧读取器将无法反序列化它(新读取器根本不会包含它)。
  4. 这是一个很大的禁忌。如果您需要更改字段的类型,请保留旧字段(如果需要,可以给它一个后缀,如 _Obsolete)并引入“正确”类型的新字段。

对于它的值(value):您写道您正在使用 F#,一些 F# 特定的更改正在制作中,请参阅 here 。这将支持记录、联合和核心 F# 数据类型。

更新:现在有一个section on schema evolution在 Bond 文档中。

关于bond - Microsoft Bond 架构演变最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41860787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com