当我们需要维护遗留支持时,如何更新现有的数据结构

本文关键字:更新 何更新 数据结构 我们 维护 支持 | 更新日期: 2023-09-27 17:50:32

长话短说,我们有一个老化的应用程序,多年来我们一直在开发它。有一些固定的东西已经开始引起问题,这让我思考我们如何更好地构建数据。这样做的问题是,我们需要维护对客户端可能拥有的旧的序列化数据文件的支持,这使得如果我们对类进行任何彻底的更改,则很难迁移到新版本。

我的问题是,有没有一个好的、经过测试的过程/架构模式,可以在将来帮助我们,如果我们决定在重构代码上投入一些精力?

EDIT都是二进制序列化

当我们需要维护遗留支持时,如何更新现有的数据结构

只是想出来,但类似于COM用于"版本"的方式可能会起作用…类似于:

[Serializable]
public class Data
{
    public string Field1 {get; set;}
}
[Serializable]
public class Data2
{
    public Data2() { _version1 = new Data();}
    [NonSerialized]
    private Data _version1; 
    public string Field1 
    { 
        get { return _version1.Field1;} 
        set { _version1.Field1 = value;}
    }
    public int Field2 {get; set;}
}
[Serializable]
public class Data3
{
    public Data3() { _version2 = new Data2();}
    [NonSerialized]
    private Data2 _version2;
    public string Field1 
    { 
        get { return _version2.Field1;} 
        set { _version2.Field1 = value;}
    }
    public int Field2 
    { 
        get { return _version2.Field2;} 
        set { _version2.Field2 = value;}
    }
    public double Field3 {get; set;}    
}

事实上,现在我看着摆在我面前的这个,我不能说它是一个理想的解决方案。它很快就会导致"版本号地狱"的泛滥,这很像现在的COM(有时检查各种DirectX接口名称)

也就是说,如果一个可能的答案,那么我就不写了。