Microsoft Bond 架构演变最佳实践

2023-12-01

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

无论如何,我们正在使用 .NET (C#/F#) 进行编写,并打算最初使用 CompactBinaryWriter 和 CompactBinaryReader 格式。

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

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

谢谢你!

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


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

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

其价值在于:您写道您正在使用 F#,一些 F# 特定更改正在进行中,请参阅here。这将支持记录、联合和核心 F# 数据类型。

Update:现在有一个关于模式演化的部分在债券文件中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Microsoft Bond 架构演变最佳实践 的相关文章

  • 为什么当我调用 Canvas3D.repaint() 时 Java3D 画布会闪烁

    我在 Java3D 画布上使用 postRender 绘制了 2D 元素 并希望对这些元素进行动画处理 在循环中我调用 Canvas3D repaint while animationIsRunning I update positions
  • 如何获取 tab_id 将其设置为活动选项卡

    我正在尝试使用 tkinter 构建一个文本编辑器 我只是想将焦点设置在新打开的选项卡中 通过使用静态 tab id 我可以立即设置它 但如果我一次有超过 15 个选项卡 则很难找到 tab id 我想要 tab id 与 tab name
  • 如何获取数字的数字而不将其转换为字符串/字符数组?

    如何在 C 中获取数字的数字而不将其转换为字符串或字符数组 下面按重要性升序打印数字 即个位 然后是十位 等等 do int digit n 10 putchar 0 digit n 10 while n gt 0
  • “拖动”移动 uibutton,使其行为类似于 uiScrollView

    我需要在屏幕上上下滑动 uibutton 仅限 Y 它需要被限制在一个区域内 我希望能够点击它并拖动or轻拂它 就像 uiScrollView 一样 它与 uiScrollView 不同的原因是您必须从按钮开始 而不是从 uiScrollV
  • 批处理文件成功和错误记录

    有没有办法在批处理文件中记录批处理文件的错误和成功 我正在尝试将文件从我的计算机复制到 200 台机器 效果很好 但想知道哪个失败以及失败的原因 因为屏幕消失得很快 echo off if 1 goto usage echo mapping
  • Antlr左递归问题

    我的 Antlr 语法中存在左递归问题 虽然我认为我理解为什么会出现问题 但我无法想出解决方案 问题出在我的数据类型规则的最后一行 我已经包含了完整的语法供您查看 grammar Test options output AST ASTLab
  • ggplot 将不会绘制缺失的类别

    我正在与 ggplot 作斗争 我总是这样做 有许多very关于强制 ggplot 在图例中包含零值类别的类似问题 here and here 例如 但是我 think I 有一个稍微不同的要求 我对scale x discrete和sca
  • VHDL:对固定信号值进行零扩展

    如何对固定信号值进行零扩展 我有以下信号 signal shamt std logic vector 4 downto 0 在将其分配给另一个大小为 31 到 0 的变量之前 我必须将 shamt 归零 我有以下代码 但我不确定它是否正确
  • 如何查找 PCSC 读卡器的设备实例 ID

    仅具有 PCSC 读取器的句柄和上下文 使用winscard在 Windows gt XP 上 有什么方法可以获取其设备实例 ID 或其他可以在SetupDi 用于查明为所述阅读器加载了哪个驱动程序的 API SCardGetReaderD
  • VS 2013 SDK:如何仅为代码窗口编辑器绑定热键?

    In C 要不然VB Net 使用 Visual StudioPackage 我想为CommandBarButton 例如Ctrl E R 然后 当按下时 关联的CommandBarButton应该调用它的Execute方法 我想是这样 我
  • 从unity上传图片到facebook

    我正在开发一个 Unity 游戏 你可以在其中拍照并将这张照片连同一些标签和东西 很像 Friendsmash 从 Unity 上传到 Facebook 问题是我没有可以放置屏幕截图的网络服务器 并且 Fb Feeb picture 属性只
  • WooCommerce:将产品添加到购物车并覆盖价格?

    replace order new WC Cart replace order gt empty cart true replace order gt add to cart 256 1 以上代码添加产品256到购物车1时间 但我遇到的问题
  • AngularAMD + ui-router + 动态控制器名称?

    我试图在我的应用程序中编写通用路由 并根据路由参数动态解析视图和控制器名称 我有以下有效的代码 stateProvider state default angularAMD route url module action id templa
  • 带有 JWT 令牌的 Google 云存储 JSON API

    我正在尝试使用 Google Cloud Storage 的 JSON API 从 Google Cloud Storage 检索文件 我不被允许使用 SDK 是否可以从 ServiceAccount json 文件创建 JWT 并使用 J

随机推荐

  • CodeIgniter index.php URL 重写 OVH

    我读了很多关于这个主题的主题 但没有人起作用 首先我分享我的配置 虚拟主机文件
  • bash 中的转义字符(对于 JSON)

    我使用 git 然后将提交消息和其他位作为 JSON 有效负载发布到服务器 目前我有 MSG git log n 1 format oneline grep o 它将 MSG 设置为如下所示 Calendar can t go back p
  • 在ios中的谷歌地图上添加多个图钉

    我想在加载谷歌地图时在谷歌地图上添加多个图钉 我有附近位置的纬度和经度值的列表 我怎样才能用图钉在地图上显示所有这些位置 我正在使用适用于 iOS 的 Google SDK 我正在使用以下代码 但它对我不起作用 NSMutableArray
  • 如何独立管理和重新加载多个 QuickFIX/J 会话?

    我可以在一个 QuickFIX J 设置文件中配置多个会话 然后使用一个SocketInitiator 但我希望能够修改一个或多个会话的配置 然后仅重新启动这些会话而不影响任何其他会话 我可以通过拥有多个设置文件并使用一个来做到这一点Soc
  • 自定义 TensorFlow 指标:给定假阳性率下的真阳性率

    我有一个二元分类问题 类别背景 bg 0 信号 sig 1 我正在为此训练神经网络 出于监控目的 我尝试在 Keras 中使用 TensorFlow 后端实现自定义指标 该指标执行以下操作 1 计算我的 NN 输出的阈值 这将导致 X 的误
  • 像 gitolite 这样的程序如何工作?

    我很好奇 gitolite 等程序是如何工作的 特别是它们如何与 SSH 协议交互以提供定制的体验 有人可以提供一个例子来说明我如何完成类似以下的事情以及我可以在哪里了解有关该主题的更多信息吗 ssh email protected PTY
  • 准备好的陈述有简写吗?

    最近我开始使用准备好的语句 但是 我觉得我的代码变得有点过于混乱 包含所有临时变量和仅进行单个查询所需的额外行 到目前为止 我的代码如下所示 stmt conn gt prepare SELECT FROM locations WHERE
  • 无需本地信任库的客户端证书身份验证

    好吧 一开始这可能听起来很奇怪 所以请耐心听我说 我需要解决的问题是这样的 我需要以某种方式在 Spring Boot 应用程序中启用客户端身份验证 允许客户端自己创建证书 without服务器需要使用服务器私钥对 CSR 进行签名 我怎样
  • 防止任务管理器中的进程被关闭

    我正在开发一个小程序来提高工作效率 它应该在预设的分钟数后断开用户与互联网的连接或关闭您的计算机 不应使用任务管理器关闭该程序 我可以编译该程序并运行它 但我可以使用任务管理器关闭它 我的灵感来自于这一页 include
  • 如何用 sed、awk 等 shell 命令的输出替换子字符串?

    我想用sed或任何命令行工具 用 shell 命令的输出替换部分行 例如 通过调用将 linux 纪元替换为人类可读的时间戳date 通过调用内部解码器 将特定协议数据包的十六进制转储替换为其解码后的对应数据包 sed似乎最合适 因为它也允
  • Div 在 IE8 中不会浮动

    这将是主要标记 div class mancha div class logo div div class espacio div class eltitular HEADER div div class lacarta LEFT CONT
  • 将随机森林预测作为列添加到测试文件中

    我在 python 中工作pandas in a Jupyter笔记本 我在其中为泰坦尼克号数据集创建了一个随机森林模型 https www kaggle com c titanic data 我读入测试和训练数据 然后清理它并添加新列 两
  • 使用node/js/MySQL工作台将变量传递给查询字符串

    问题 将变量传递到插入语句时 我在数据库中收到空插入 变量有名字 姓氏 电子邮件 密码 我所知道的 我知道我正在获取用户输入表单数据 我正在安慰它们在插入语句之前存储的变量 该语句起作用并将表单数据打印到控制台 当表单在网页上提交时 它存储
  • C# 中两个进程之间的同步。

    有什么办法可以让我们同步两个独立的进程吗 就像如果他们共享资源一样 我想同步它们 我正在使用 C 你可以使用 Mutex 类 请参阅此处的文档 http msdn microsoft com en us library system thr
  • 如何制作库存物品标签 (IN619200) 为收到的每件物品打印一个标签?

    开箱即用Acumatica Inventory Item Label报告 IN619200 旨在仅当项目序列化时才在收据上打印该行项目的多个标签 我们将修改报告 允许用户选择收据编号 并让系统根据每件商品收到的数量生成标签数量 无论它们是否
  • 在 jPanel 周围拖动/移动形状

    昨天我问了一个关于如何绘制边界框以在内部容纳形状的问题如何拖放所选形状 第一个问题就解决了 但我在移动形状时遇到了一些麻烦 是否有任何特定的转换可以在 jPanel 周围移动形状 我有这个代码 public boolean drag Mou
  • Qt 5.2.0 缺少相机服务

    我有一个罗技高清网络摄像头 C270 我想编写一个简单的网络摄像头应用程序 因此我尝试编译 Qt 摄像头示例 Qt Qt5 2 0 5 2 0 msvc 2010 opengl examples multimediawidgets came
  • 如何在sql server中使用like运算符选择匹配百分比高于其他记录的记录?

    我有一组记录需要使用条件进行搜索 但标准返回我多行 因此 我需要具有最大标准匹配百分比的前 2 条记录 我研究了模糊逻辑 但发现对于如此简单的问题来说它太复杂了 我有如下场景 SELECT DISTINCT FirstName LastNa
  • 根据深色或浅色模式更改样式

    我想在我的 Vue 应用程序上有一个深色和浅色主题 我可以创造dark scss文件并更改类样式和使用 important属性来覆盖组件中定义的样式 或者我可以使用props在我的组件中并更改 classNamev if根据主题 例如将类别
  • Microsoft Bond 架构演变最佳实践

    Microsoft Bond 是否有一些关于架构如何随时间演变的最佳实践 我想确保我们遵循最佳实践 以便我们具有两种方式的兼容性 即允许我们的 Bond 类型将旧版本演变成当前版本 以及向后兼容性允许从较新版本转换回旧版本 我没有在文档中看