0

私の会社では、いくつかのアプリケーションをリファクタリングしています。リファクタリングする側面の1つは、「ユーザーオブジェクト」を表すデータのクラスです。つまり、ユーザーが作成し、ローカルに保持する必要があるオブジェクトです。TDD、継続的展開、および持続性 - それらを簡略化する方法

アプリケーションの機能が向上するなど、継続的な展開のワークフローに取り組んでいますが、インストールされたベースは拡大する必要があります。

しかし、シリアライズされる各クラスの設計は、ユースケースをどのようにサポートするかによって定義されるため、機能の理解とモデル化が進むにつれてデザインが変更されるため、クライアントサイドの永続オブジェクト最終的にデザインが「壊れる」ときに、各ユーザーの視点から貴重な資産ですか?

次の例は、説明のためだけのもので、プロパティタイプの変更やプロパティの追加/削除など、さまざまな可能性があります。だから、

public class Device 
{ 
    public PlatformEnum CompatiblePlatform {get; set;} 
} 

、我々はそれを使用し始め、一部の顧客にシステムを展開し、そのファイルにDeviceインスタンスの多くを持続:以下のクラスは、与えられたデバイスと互換性のあるプラットフォーム伝えPlatform性質を持っていますシステム。

しかし、各デバイスが1 Platformより以上と互換性があるようにするために、最終的に必要性/可能性が生じ、したがって、クラスは現在代わりCompatiblePlatformのための単一の値のコレクションが含ま:

public class Device 
{ 
    public IEnumerable<PlatformEnum> CompatiblePlatforms {get; set;} 
} 

そこで、私たちは問題を抱えています。かなりの量のシリアライズされたファイルを処理することで、新しいバージョンのデザインによって自動的に読み込まれるようにする方法はありますか?

そして、より広義には、直列化可能クラスの設計の場合、ユーザーストーリーベースのATDDの「Emergent Design」を使用して、「Design up」をどのように簡略化するべきですか?何らかの種類のバージョン管理を使用すべきですか、またはよく知られている予防措置を取るべきですか?

+2

これは、TDD、継続的な展開、または今述べたその他の用語とはあまり関係ありません。これは標準的な問題です。古いバージョンのプラットフォームからデータを移行する方法です。 –

+0

@OliverCharlesworth私はそれに同意することができます。自分の質問を重複して表示するのと比べて、クローズする必要性をより正確に評価するために、どうすればそれを探すことができると思いますか? – heltonbiker

答えて

2

一般的なアプローチは、シリアル化された各オブジェクトにバージョン番号を書き込み、古いバージョンを処理するための非直列化コードを展開することです。例えばあなたの例では、バージョン2 Deviceコードは、バージョン1を読み、PlatformEnumの列挙で単一のエントリとしてPlatformEnumをロードします。

関連する問題