代码之家  ›  专栏  ›  技术社区  ›  n8wrl

IoC和接口最佳实践

  •  0
  • n8wrl  · 技术社区  · 17 年前

    我正在通过摆弄一个现有的项目,在通往TDD的道路上尝试IoC。简而言之,我的问题是:当公共和非公共方法感兴趣时,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;
        }
        ...
    }
    

    ThatTing使用它的ThisThingBase引用来调用经常被ThisThingBase的后代重载的方法。

    方法1和方法2是公开的。方法3和方法4是内部的,仅由ThatThings使用。

    我想在没有ThisThing的情况下测试ThatThing,反之亦然。

    研究IoC时,我的第一个想法是,我应该定义一个IThing接口,通过ThisThingBase实现它,并将其传递给ThatThing构造函数。IThing将是客户端可以调用的公共接口,但它不包括ThatTing也需要的Method3或Method4。

    我是否应该为这两个方法定义第二个接口(可能是IThingInternal),并将这两个接口都传递给ThatTing?

    1 回复  |  直到 17 年前
        1
  •  0
  •   Cristian Libardo    17 年前

    IoC容器的问题在于它们无法控制对象的生命周期。为什么在ThisThingBase上使用工厂方法?如果可以让IoC容器构造Thatthing,这将提高可测试性。

    根据这个例子很难说,但Thatting和ThisThingBase之间可能存在不必要的耦合。

    接口可能很好,但有时在您所依赖的类上使用虚拟方法来启用测试就足够了。

    推荐文章