IoC&接口最佳实践

时间:2008-12-02 17:57:57

标签: tdd inversion-of-control interface

我正在通过摆弄现有项目来尝试使用IoC前往TDD。简而言之,我的问题是:当公共和非公共方法受到关注时,围绕IoC的最佳实践是什么?

有两个类:

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。

我应该定义第二个接口 - 可能是IThingInternal - 对于这两种方法并将BOTH接口传递给ThatThing吗?

1 个答案:

答案 0 :(得分:0)

IoC容器的问题在于它们无法控制对象的生命周期。为什么在ThisThingBase上使用工厂方法?如果有可能让IoC容器构建那个东西,它会增加可测试性。

根据示例很难说,但是你可能在Thatthing和ThisThingBase之间有不必要的耦合。

接口可能很好,但有时候,您依赖的类上的虚拟方法足以启用测试。