1

カスタム属性を使用してメタデータを格納する場合、インターフェイスを実装するクラスが属性に同じデータを持っていると仮定して、インターフェイスまたはインターフェイスを実装するクラスを装飾するのが最適ですか?

更新:基本的に、プロジェクトのカスタムデータストレージメカニズムを作成しています。オブジェクトは、保存されているさまざまなテーブルを表します。カスタム属性は、データセット内のどのテーブルを使用してそのクラスのオブジェクトを格納するかを指定し、どのテーブルが:m関係に関与しているかを識別するために使用されます。

それで、私がインターフェースに属性を置く場合、これはより明確なアプローチですか、それともインターフェースを乱雑にし、データ自体へのアクセスをより面倒にしますか?

4

2 に答える 2

3

シナリオによって異なります。たとえば、WCFは、操作コントラクトのインターフェイスを装飾します。

ただし、 (インターフェイス自体ではなく)オブジェクトについて話す場合、特にクラスが明示的なインターフェイス実装を使用している場合は、コードを呼び出してインターフェイスメタデータを取得するのは面倒な場合があることに注意してください。

クラスを飾るのがより一般的ですが、それはまったく同じ質問ではありません;-p

属性が実際に(インスタンスではなく)インターフェースに固有である場合は、細かく-インターフェースを装飾して話し合いますtypeof(IFoo)。ただし、コードが属性のタイプごとの値を設定できることを期待する場合は、次のようにする必要があります。クラスレベル。

シナリオは何ですか?

于 2009-01-13T13:26:42.157 に答える
2

それは、インターフェースがメタデータと関係があるかどうかによって異なります。

interface IRunnable
{
    void Run();
}

class Test : IRunnable
{
    public void Run() { }
}

この例では、属性がインターフェイスの意図に関連している場合は、属性をインターフェイスに配置するのが理にかなっています。属性がすべての実装に適用できる場合は、属性をインターフェースに配置します。

ただし、属性がクラスの「実行可能性」(IRunnableCLRではない「実行可能性」と関係がある)とは関係がない場合は、属性をクラスに配置します。

于 2009-01-13T13:29:24.633 に答える