1

非常に長い話ですが、私たちが開発してきた何年にもわたって、いくらかのくだらないものを獲得した老朽化したアプリケーションがあります。しかし、問題を引き起こし始めているいくつかのボルトで固定されたものがあり、データをもう少しうまく構造化する方法について考えさせられました。ただし、これに伴う問題は、クライアントが持つ可能性のある古いシリアル化されたデータファイルのサポートを維持する必要があることです。これにより、クラスに大幅な変更を加えた場合、新しいビルドに移行することが非常に困難になります。

私の質問は、コードのリファクタリングにいくらかの努力を費やすことを決定した場合に、将来私たちを助ける可能性のある、テスト済みの優れたプロセス/アーキテクチャパターンはありますか?

編集それはすべてバイナリシリアル化です

4

1 に答える 1

0

大声で考えているだけですが、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インターフェイス名をいつかチェックしてください)

とはいえ、それ潜在的な答えなので、そのままにしておきます。

于 2013-01-03T06:52:48.343 に答える