Si je suis un principe d'injection de dépendances pour un design de classe, je devrais m'assurer que ma classe n'essaie pas d'instancier ses dépendances dans ma classe, mais plutôt de demander l'objet via le constructeur. De cette façon, j'ai le contrôle des dépendances que je fournis pour la classe lors des tests unitaires. C'est ce que je comprends. Mais ce dont je ne suis pas sûr, est-ce que cela signifie qu'un bon design de classe qui suit le principe de l'injection de dépendances signifie que ses champs ne devraient jamais être initialisés en ligne? Devrions-nous totalement éviter l'initialisation en ligne pour produire du code testable?L'injection de dépendance signifie-t-elle pas d'initialisation en ligne?
EDIT
Quel est le meilleur 1 ou 2?
public class Car {
private Tire tire = new Tire(); //
}
public class Car {
private Tire tire;
public Car(Tire tire) {
this.tire = tire
}
}
Cela dépend évidemment des types de champs.Cela n'a aucun sens d'injecter des types "basiques" comme des classes "Number", "date" ("java.time") ou par exemple "StringBuilder", quand vous en avez seulement besoin dans cette classe. – Tom
Que voulez-vous dire par "initialisation en ligne"? Que les champs sont initialisés dans le constructeur par la classe elle-même ou quoi? – lexicore
* Je devrais m'assurer que ma classe n'essaie pas d'instancier ses dépendances dans ma classe *: Absolument. Néanmoins, c'est exactement ce que fait votre premier extrait. Donc vous avez votre réponse. La dépendance doit être fournie depuis l'extérieur de la classe. Ce n'est clairement pas le cas de votre premier extrait. –