0

TDD に向かう途中で、既存のプロジェクトをいじって IoC を試しています。一言で言えば、私の質問は次のとおりです。パブリック メソッドと非パブリック メソッドに関心がある場合、IoC に関するベスト プラクティスは何ですか?

次の 2 つのクラスがあります。

public abstract class ThisThingBase
{
    public virtual void Method1() {}
    public virtual void Method2() {}

    public ThatThing GetThat()
    {
        return new ThatThing(this);
    }
    internal virtual void Method3() {}
    internal virtual void Method4() {}
}

public class Thathing
{
    public ThatThing(ThisThingBase thing)
    {
        m_thing = thing;
    }
    ...
}

ThatThing は、ThisThingBase 参照を使用して、ThisThingBase の子孫によってしばしばオーバーロードされるメソッドを呼び出すいくつかのことを行います。

Method1 と Method2 はパブリックです。Method3 と Method4 は内部であり、ThatThings によってのみ使用されます。

ThisThing なしで ThatThing をテストしたいと思います。

IoC について調べてみたときに最初に考えたのは、IThing インターフェイスを定義し、それを ThisThingBase で実装して、それを ThatThing コンストラクターに渡す必要があるということでした。IThing はクライアントが呼び出すことができるパブリック インターフェイスですが、ThatThing も必要とする Method3 または Method4 は含まれていません。

これらの 2 つのメソッドに対して 2 番目のインターフェイス (おそらく IThingInternal) を定義し、両方のインターフェイスを ThatThing に渡す必要がありますか?

4

1 に答える 1

0

IoC コンテナーの問題は、オブジェクトのライフサイクルを制御できない場合です。ThisThingBase のファクトリ メソッドはなぜですか? IoC コンテナに Thatthing を構築させることができれば、テスト容易性が向上します。

例に基づいて言うのは難しいですが、Thatthing と ThisThingBase の間に不要な結合がある可能性があります。

インターフェースは良いものですが、テストを可能にするために依存するクラスの仮想メソッドで十分な場合もあります。

于 2008-12-02T18:22:34.337 に答える