首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Microsoft Bond模式演进最佳实践

Microsoft Bond模式演进最佳实践
EN

Stack Overflow用户
提问于 2017-01-25 20:11:20
回答 2查看 1.1K关注 0票数 3

对于模式如何随着时间的发展,Microsoft有一些最佳实践吗?我想确保我们遵循的是最佳实践,这样我们就有了两种方式的兼容性(即允许我们的Bond类型将旧版本进化到当前版本,以及向后兼容,允许从新版本转换回旧版本)。虽然其他序列化框架(如Avro )在文档中有明确的详细说明,但我认为这在文档(例如cs.htmlhttps://microsoft.github.io/bond/manual/compiler.html#idl-syntax )中并没有具体解决。

至于它的价值,我们正在用.NET (C#/F#)编写,并打算最初使用CompactBinaryWriter和CompactBinaryReader格式。

例如,我设想在以下方面提供一些指导:

  1. 字段名称可以随时间变化,因为字段序号用于字段解析,而不是直接使用名称(SimpleJSON除外)。我相信这是真的,是吗?
  2. 添加一个新的“必需”字段需要给该字段一个默认值。
  3. 删除较新版本中的字段是可以的,前提是旧版本分配了一个默认值。
  4. 那么改变字段的类型呢?例如,字段能否从版本1中的字符串字段更改为版本2中的int64?它能否从字符串更改为自定义联合(带有可选字段的自定义类型)?
  5. 还有其他建议吗?

谢谢!

也会有兴趣,如果有任何活跃的论坛社区为这种类型的微软邦德问题,我无法找到一个.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-13 22:42:05

现在可以在这里找到邦德模式演进规则和最佳实践:Cpp.html#模式-演化 Cs.html#模式-进化

票数 -1
EN

Stack Overflow用户

发布于 2017-01-26 09:49:31

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

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

值得注意的是:您正在编写正在使用F#的F#,一些特定于F#的更改正在进行中,参见这里。这将支持记录、联合和核心F#数据类型。

更新:现在在邦德文档中有一个模式演化一节

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41860787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档