私のアプリでは、ID を文字列として格納する DB を使用しています。DB には、ドキュメント/行ごとに別のプロパティ (Etag) も格納されていました。そのため、ドメイン エンティティをこの基本クラスから派生させました。
public class EntityBase : NotifyPropertyChangedBase
{
public string Id { get; set; }
public Guid ETag { get; set; }
}
現在、アプリケーションに別のデータ レイヤーを追加していますが、古いレイヤーを削除したくありません。実行時の決定に基づいて、特定のデータ層を切り替えて使用できると便利です。問題は、新しい DB に Id を int として格納したいということです。そして、ETag はその新しい DB では不要な概念です。
私はこの変化をどう管理するか悩んでいます。EntityBase.Id を int に変更すると、古いデータ レイヤーはコンパイルされません。古いデータ レイヤーを使用している場合は特定の EntityBase を使用し、新しいデータ レイヤーを使用している場合は別の EntityBase を使用したいと考えています。それはただ一つの考えです。たぶん、より良いアプローチがありますか?これを機能させる方法について何か提案はありますか?
ところで、永続化層の問題は、ドメイン層オブジェクト (ID が文字列または int など) までは機能しないはずだと思います。しかし、それでは遅すぎます。これが私が置かれている状況です。どうすればよいか、誰かが良いアドバイスをしてくれることを願っています。
Id2 を EntityBase に追加することを考えていました:
public class EntityBase : NotifyPropertyChangedBase
{
public string Id { get; set; }
public int Id2 { get; set; } // New property for new DB only
public Guid ETag { get; set; }
}
次に、新しい DAL マッピングで、テーブルの Id 列を Id ではなく Id2 にマップします。しかし、私のビジネス ロジックは Id のみを参照するため、これは機能しません。まだ考え中...行き詰まるかもしれません...
ハックとして、EntityBase を元の形式のままにしておくことができます。次に、新しい DAL で ORM を実行すると、テーブルの ID を文字列に変換するだけで済みます。