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

时间:2012-03-06 14:54:35

标签: c# backwards-compatibility

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

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

通过阅读

的xml部分来构建名称和url部分
<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>

如何保持向后兼容性?这意味着如果我稍后在课堂上扩展,我怎么能保证在旧版本dbs上部署的较新版本(有时可能是这种情况)不会崩溃?

1 个答案:

答案 0 :(得分:3)

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

特别(摘要):

考虑两种XML模式更改案例:

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

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

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

  1. 更改(内部)架构版本属性。
  2. 在根元素上创建schemaVersion属性。
  3. 更改架构的targetNamespace。
  4. 更改架构的名称/位置。
  5. XML架构版本控制最佳实践

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

    [2]在实例文档中确定与实例兼容的架构的版本/版本。

    [3]提供以前版本的XML模式。

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

    [5]新模式改变了某个元素的解释(例如,构造 对于以前的模式而言有效且有意义的不会对其进行验证 新架构),应该更改目标命名空间。