Я экспериментирую с 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.
Я хотел бы протестировать ThatThing без ThisThing и наоборот.
Изучая IoC, моей первой мыслью было определить интерфейс IThing, реализовать его с помощью ThisThingBase и передать конструктору ThatThing. IThing может быть общедоступным интерфейсом, который могут вызывать клиенты, но он не включает Method3 или Method4, которые также нужны ThatThing.
Должен ли я определить второй интерфейс - возможно, IThingInternal - для этих двух методов и передать ОБА интерфейса в ThatThing?