gpt4 book ai didi

c# - 确保动态加载类型的向后兼容性

转载 作者:行者123 更新时间:2023-11-30 22:30:42 27 4
gpt4 key购买 nike

我有一个动态加载的类型。变量部分是从 db 中的 xml 字段中读取的。例如

class SomeClass 
{
public int Id {get; set;}
public string Name {get; set;}
public string Url {get; set;}
}

name 和 url 部分是通过读取 xml 部分构造的

<element>
<name>Name</name>
<type>string</type>
</element>
<element>
<name>Url</name>
<type>string</type>
</element>

稍后类将被动态加载到:

class SomeClass 
{
public int Id {get; set;}
public string Name {get; set;}
public string Url {get; set;}
public string FallbackUrl {get; set;}
}

来自

<element>
<name>Name</name>
<type>string</type>
</element>
<element>
<name>Url</name>
< type>string</type>
</element>
<element>
<name>FallbackUrl</name>
<type>string</type>
</element>

如何保持向后兼容性?这意味着如果我稍后扩展类,我如何确保当部署在旧版本数据库上的新版本(有时可能是这种情况)不会崩溃?

最佳答案

阅读: http://www.xfront.com/Versioning.pdf

特别是(摘要):

考虑两种更改 XML 架构的情况:

案例 1. 新架构更改了某些元素的解释。例如,对先前模式有效且有意义的构造不会针对新模式进行验证。

案例 2。新架构扩展了命名空间(例如,通过添加新元素),但不会使之前有效的文档失效。

识别新架构版本的一些选项是:

  1. 更改(内部)架构版本属性。
  2. 在根元素上创建一个 schemaVersion 属性。
  3. 更改架构的目标命名空间。
  4. 更改架构的名称/位置。

XML 架构版本控制最佳实践

[1] 捕获 XML 模式中某处的模式版本。

[2] 在实例文档中标识与实例兼容的架构版本。

[3] 使以前版本的 XML 模式可用。

[4] 当仅扩展 XML 模式(例如,新元素、属性、对枚举列表的扩展等)时,应努力不使现有实例文档无效

[5] 新模式改变了某些元素的解释(例如,一个构造对于先前的架构有效且有意义的内容不会针对新架构),应该更改目标命名空间。

关于c# - 确保动态加载类型的向后兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9586060/

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