Microsoft Bond运行时schemaDef

用户名

我希望有人能够说明Microsoft Bond运行时架构(SchemaDef)的常见用例。我知道在编译时不知道模式定义时会使用这些方法,但是如果对象的形状是可变的并且经常更改,那么运行时生成的模式可以提供什么好处?

我的用例是业务用户(通过规则引擎)控制对象的形状。可以想象,他们可以做各种可能破坏我们向后兼容性的事情(例如,反转对象上字段的顺序)。如果我们计划保留用户创建的所有对象版本,是否有任何方法可以使用Bond运行时模式来管理向后/向前兼容性?我假设没有,好像他们从此倒转了一样:

0: int64 myInt;
1: string myString;

对此

0: string myString;
1: int64 myInt;

我期望运行时错误。这意味着使用运行时模式管理对象不会为我提供太多帮助。

在什么情况下,运行时模式实际上会有用?

谢谢!

至少

运行时模式的一些用途是:

  • 使用简单二进制协议来处理架构更改
  • 模式验证/开发
  • 在GUI中渲染结构
  • 从一个结构到另一个结构的自定义映射

如果您可以主动拒绝不兼容的架构,那么您的案例就像是架构验证。我在一个使用引擎盖下使用Bond的系统上工作,并采用了这种方法。有一个明确的“更改此实体的架构”操作可验证两个架构是否相互兼容。

我不知道您系统中的数据流,因此可能无法进行这种验证。在这种情况下,您可以使用运行时模式以及业务用户提供的一些规则在不同形状之间进行转换。

简单二进制

从“简单二进制”中反序列化时,读取者必须知道编写者使用的确切架构,否则它无法解释字节,从而可能导致静默数据损坏。

如果架构进行以下更改,则可能会发生这种损坏:

// starting struct
struct Foo
{
    0: uint8 f1;
    1: uint16 f2;
}

Foo { f1: 1, f2: 2}is的简单二进制序列化表示形式0x01 0x02 0x00

现在让我们将模式更改为:

// changed struct
struct Foo
{
    0: uint8 f1;
    // It's OK to remove an optional field.
    // 1: uint16 f2;
    2: uint8 f3;
    3: uint8 f4;
}

如果0x01 0x02 0x00使用此模式反序列化则将得到Foo { f1: 1, f3: 2, f4: 0}请注意,它f3是2,这是不正确的:应该为0。使用旧Foo的运行时模式,读者将知道第二个和第三个字节对应于此后已删除的字段,并且可以跳过它们,从而导致预期的Foo { f1:1, f3: 0, f4: 0 }

模式验证和演化

一些使用Bond的系统具有与普通Bond规则不同的模式演化规则。在接受给定类型的结构之前,或在例如已知模式的存储库中注册这样的模式之前,可以使用运行时模式来强制执行此类规则(例如,检查类型以强制执行不使用任何集合的规则)。

您还可以遍历两个模式来确定它们彼此兼容。如果Bond本身提供了这样的API,那就太好了,这样就不必一次又一次地重新实现它。我已经针对此类API打开了GitHub问题

GUI

使用运行时模式,您可以获得有关该结构的额外信息,包括诸如字段名称之类的信息。(二进制编码协议省略了字段名称,而是依赖于字段ID。)您可以使用此附加信息来完成诸如创建特定于每个字段的GUI控件之类的操作。

有一个示例显示了在C#C ++中检查运行时模式的示例

自定义映射

在C ++中,MapTo可以使用转换将给定规则的结构转换为不兼容形状的结构。一个这样的示例,该示例利用运行时模式派生规则。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

运行时错误3061 Microsoft访问

来自分类Dev

Microsoft Visual Basic运行时错误

来自分类Dev

对象预期的Microsoft Jscript运行时错误-Node js

来自分类Dev

Microsoft VBScript运行时错误:输入文件末尾错误

来自分类Dev

首次运行时最大程度地启动Microsoft Edge

来自分类Dev

Microsoft Access运行时错误DoCmd.GoToRecord,,acNext

来自分类Dev

Microsoft Access 运行时的安装位置是什么?

来自分类Dev

如果我已经安装了Microsoft VC ++ 2017运行时,是否仍需要安装可再发行的Microsoft VC ++ 2015运行时?

来自分类Dev

Microsoft VBScript运行时错误:创建CDONTS.NEWMAIL时权限被拒绝:'CreateObject'

来自分类Dev

Microsoft.AspNet.WebApi.HelpPage版本4.0.30506在运行时出现编译错误

来自分类Dev

System.Data.Sqlite-无法安装Microsoft Visual C ++运行时

来自分类Dev

如何控制Microsoft C运行时库使用的CPU指令?

来自分类Dev

C#中的Microsoft Project 2010任务大纲级别导致运行时异常

来自分类Dev

Microsoft Visual C ++运行时版本?我需要全部保留吗?

来自分类Dev

Microsoft JScript运行时错误:“ data.EmployeeDetails.EmployeeId”为null或不是对象

来自分类Dev

Microsoft.AspNet.WebApi.HelpPage版本4.0.30506在运行时出现编译错误

来自分类Dev

microsoft jscript运行时错误'btn_click'未定义

来自分类Dev

Microsoft VBScript运行时错误:创建CDONTS.NEWMAIL时权限被拒绝:'CreateObject'

来自分类Dev

Microsoft JScript运行时错误:AngularJS v1.3.0-beta.11中的[$ injector:modulerr]

来自分类Dev

Microsoft VBScript运行时错误'800a01a8':必需的对象

来自分类Dev

Microsoft Office首次运行时需要管理员凭据

来自分类Dev

解码函数并获取Microsoft VBScript运行时错误'800a000d'

来自分类Dev

在本地运行时未定义Microsoft Edge中的Window.opener

来自分类Dev

尝试添加图像时出现Microsoft VBScript运行时错误'800a0034'

来自分类Dev

Windows 10“预期对象” Microsoft JScript运行时错误上的节点执行ping

来自分类Dev

查询表达式中的Microsoft Access运行时错误'3075'

来自分类Dev

Microsoft Access:运行时错误3142。SQL语句结束后找到字符

来自分类Dev

运行时错误 1004:Microsoft Excel 无法访问该文件

来自分类Dev

Microsoft Visual Basic,运行时错误 424:需要对象

Related 相关文章

  1. 1

    运行时错误3061 Microsoft访问

  2. 2

    Microsoft Visual Basic运行时错误

  3. 3

    对象预期的Microsoft Jscript运行时错误-Node js

  4. 4

    Microsoft VBScript运行时错误:输入文件末尾错误

  5. 5

    首次运行时最大程度地启动Microsoft Edge

  6. 6

    Microsoft Access运行时错误DoCmd.GoToRecord,,acNext

  7. 7

    Microsoft Access 运行时的安装位置是什么?

  8. 8

    如果我已经安装了Microsoft VC ++ 2017运行时,是否仍需要安装可再发行的Microsoft VC ++ 2015运行时?

  9. 9

    Microsoft VBScript运行时错误:创建CDONTS.NEWMAIL时权限被拒绝:'CreateObject'

  10. 10

    Microsoft.AspNet.WebApi.HelpPage版本4.0.30506在运行时出现编译错误

  11. 11

    System.Data.Sqlite-无法安装Microsoft Visual C ++运行时

  12. 12

    如何控制Microsoft C运行时库使用的CPU指令?

  13. 13

    C#中的Microsoft Project 2010任务大纲级别导致运行时异常

  14. 14

    Microsoft Visual C ++运行时版本?我需要全部保留吗?

  15. 15

    Microsoft JScript运行时错误:“ data.EmployeeDetails.EmployeeId”为null或不是对象

  16. 16

    Microsoft.AspNet.WebApi.HelpPage版本4.0.30506在运行时出现编译错误

  17. 17

    microsoft jscript运行时错误'btn_click'未定义

  18. 18

    Microsoft VBScript运行时错误:创建CDONTS.NEWMAIL时权限被拒绝:'CreateObject'

  19. 19

    Microsoft JScript运行时错误:AngularJS v1.3.0-beta.11中的[$ injector:modulerr]

  20. 20

    Microsoft VBScript运行时错误'800a01a8':必需的对象

  21. 21

    Microsoft Office首次运行时需要管理员凭据

  22. 22

    解码函数并获取Microsoft VBScript运行时错误'800a000d'

  23. 23

    在本地运行时未定义Microsoft Edge中的Window.opener

  24. 24

    尝试添加图像时出现Microsoft VBScript运行时错误'800a0034'

  25. 25

    Windows 10“预期对象” Microsoft JScript运行时错误上的节点执行ping

  26. 26

    查询表达式中的Microsoft Access运行时错误'3075'

  27. 27

    Microsoft Access:运行时错误3142。SQL语句结束后找到字符

  28. 28

    运行时错误 1004:Microsoft Excel 无法访问该文件

  29. 29

    Microsoft Visual Basic,运行时错误 424:需要对象

热门标签

归档