J'expérimente IoC sur mon chemin vers TDD en jouant avec un projet existant. En résumé, ma question est la suivante: quelles sont les meilleures pratiques en matière d'IoC lorsque les méthodes publiques et non publiques présentent un intérêt?Bonnes pratiques IoC & Interfaces
Il existe deux classes:
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 fait quelques trucs en utilisant la référence ThisThingBase pour appeler des méthodes qui sont souvent surchargées par les descendants de ThisThingBase.
La méthode 1 et la méthode 2 sont publiques. Method3 et Method4 sont internes et seulement utilisés par ThatThings.
Je voudrais tester ThatThing sans ThisThing et vice-versa.
En étudiant IoC, j'ai d'abord pensé que je devais définir une interface IThing, l'implémenter par ThisThingBase et la transmettre au constructeur ThatThing. IThing serait l'interface publique que les clients pourraient appeler mais elle n'inclut pas Method3 ou Method4 dont ThatThing a également besoin.
Devrais-je définir une deuxième interface - IThingInternal peut-être - pour ces deux méthodes et passer les deux interfaces à ThatThing?
Excellent point sur l'usine ThatThing - il y en a un, en fait, mais j'étais inquiet que mon article devienne trop long. Peut-être que je n'aurais pas dû faire toute la histoire de la viande. Le projet est pour la radio amateur et l'interfaçage avec des appareils physiques. Je pensais que c'était trop. – n8wrl
Le problème est que ces choses sont très difficiles à discuter dans l'abstrait, car il y a beaucoup d'options, et celles qui ont du sens dépendent des détails. Je vous encourage donc à baser votre question sur votre véritable code. –