2008-12-02 90 views
0

我正在通過擺弄現有項目,在前往TDD的途中嘗試IoC。簡而言之,我的問題是:當公共和非公開方法受到關注時,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; 
    } 
    ... 
} 

ThatThing不使用其ThisThingBase引用調用經常被ThisThingBase的後代重載方法的一些東西。

方法1和方法2是公共的。 Method3和Method4是內部的,只能由ThatThings使用。

我想測試沒有ThisThing的ThatThing,反之亦然。

研究IoC我的第一個想法是我應該定義一個IThing接口,通過ThisThingBase實現它並將它傳遞給ThatThing構造函數。 IThing是客戶可以調用的公共接口,但不包括ThatThing也需要的Method3或Method4。

我應該爲這兩種方法定義第二接口 - IThingInternal也許 - 並將兩個接口傳遞給ThatThing?

回答

0

IoC容器的問題是當它們無法控制對象的生命週期時。爲什麼ThisThingBase上的工廠方法?如果有可能讓IoC容器構造那麼它會增加可測試性。

根據這個例子很難說,但是你可能在Thatthing和ThisThingBase之間有不必要的耦合。

接口可能很好,但有時對於您所依賴的用於啓用測試的類的虛擬方法來說,這已足夠。

+0

有關ThatThing工廠的優秀觀點 - 實際上有一個,但我擔心我的帖子太長了。也許我不應該編造整個thisthing/thathing的東西。該項目用於業餘無線電和接口到物理設備。我認爲這太過分了。 – n8wrl 2008-12-02 18:35:18