0

私が Windows フォーム アプリケーションで使用しているデータベースには、主キーの int ID フィールド、varchar の説明、および ID と説明が使用される別のテーブルとの 1 対 1 の関係で構成される多くのテーブルがあります。

Entity Framework Code First を使用してデータベースにマップされた C# POCO の一例は次のとおりです。

public class OtherClass
{
  public int Id { get; set; }
  public string Description { get; set; }
}

public class Foo
{
  public int Id { get; set; }
  public string Description { get; set; }
  public OtherClass OtherClassProperty { get; set; }
}

「Foo」などのクラスはすべて同じ構造を共有しているため、このようなすべてのクラスで機能する 1 つの基本フォームを作成しています。

私の問題は、これらすべてのクラスの Id と Description に異なるプロパティ名があることです (たとえば、Name と呼ばれることもあります)。彼らが参照する他のクラスは常に異なることは言うまでもありません。

私が最初に考えたのは、Id、Description、KeyId、KeyDescription という固定名を持つプロパティの実装を必要とするインターフェイスを作成することでした。これらのプロパティは各クラスに実装されますが、「実際のプロパティ」のみを指します。このような:

public class Foo : MyInterface
{
  public int Id { get; set; }
  public string Description { get; set; }
  public OtherClass OtherClassProperty { get; set; }  

  //Interface implementation
  public int CommonId { get { return this.Id; } set { this.Id = value; } }
  public int CommonDescription { get { return this.Description; } set { this.Description = value; } }
  public int CommonKeyId { get { return this.OtherClassProperty.Id; } set { this.OtherClassProperty.Id = value; } }
  public int CommonKeyDescription { get { return this.OtherClassProperty.Description; } set { this.OtherClassProperty.Description = value; } }
}

これにはもっと良い解決策があるかもしれないという印象があります。また、プロパティ属性を実装し、リフレクションを使用して実行時にチェックし、プロパティを取得することも想像できます。

この状況について誰か提案がありますか?

前もって感謝します。

4

2 に答える 2

1

私にはそれは良い実装のように見えます。

それは簡単で理解しやすいです。

ただし、明示的なインターフェイスの実装を使用することを検討します

public int MyInterface.CommonId { get { return this.Id; } set { this.Id = value; } }

それ以外の

public int CommonId { get { return this.Id; } set { this.Id = value; } }

また、可能であれば、データベースをリファクタリングして名前を統一するという長期的なアーキテクチャの目標を作成します。

于 2012-11-17T12:36:54.187 に答える
1

名前の固定は良い方向に思えます。これに対するより正式なアプローチについては、Adapter patternを参照してください。

于 2012-11-17T12:40:41.763 に答える