1

クラスとインターフェイスの複数のレイヤーがある場合、インターフェイス抽出を使用する最善の方法について少し混乱しています。次の階層があるとします。

Foo : WidgetBase, IWidget 
WidgetBase: BusinessObject, IThingy
IThingy : IGenericObject

これで、IFoo インターフェイスを別のプロジェクトに抽出する必要があることがわかりました。しかし、そのインターフェース構造は実際の構造を複製する必要がありますか?つまり、BusinessObject と WidgetBase のインターフェースも抽出する必要があるのでしょうか? それとも、抽出されたインターフェイスを作成し、Foo のプロパティに対応するプロパティとそのすべての親クラスとインターフェイスを含む 1 つのインターフェイス IFoo を作成するときに、構造をフラット化する必要があるということですか?

私のインターフェースにはいくつかの列挙型のプロパティもあります。

public interface IWidget
{
    public WidgetType Type { get; set; }
}

public enum WidgetType
{
    Big, Small
}

光を当ててください。

4

2 に答える 2

1

の最小要件IFoo

IFooと を継承する必要がIWidgetありIThingyます。また、 と のすべてのパブリック メンバーを含める必要がFooありWidgetBaseます。

public interface IFoo : IWidget, IThingy
{
    // public member of Foo and WidgetBase...
}

潜在的なリファクタリング 1:

次のようなインターフェイスを定義する方がおそらく良いでしょうWidgetBase:

public interface IWidgetBase : IThingy
{
    // public members of WidgetBase...
}

次に、それIFooを継承できます:

public interface IFoo : IWidget, IWidgetBase
{
    // public member of Foo.
}

潜在的なリファクタリング 2:

同じことが にも当てはまりますBusonessObject: そのためのインターフェースを定義し、それをIWidgetBase継承させます。

一般校長:

インターフェイスはオブジェクトの動作を指定する必要があり、動作が自然に拡張される継承を使用する必要があります。

于 2013-01-25T01:27:02.937 に答える
0

新しいインターフェースの目的に応じて、それをお勧めします。IFoo にどのような動作をさせたいですか? 言い換えれば、それは新しいプロジェクトで何に使われるのかということです。新しいプロジェクトに必要なだけ抽出します。他のインターフェイスからの継承や Foo クラスの現在の状態からの継承で IFoo を台無しにしないでください。

于 2013-01-25T02:21:01.410 に答える