L'injection de dépendances
Fournir à un objet ses dépendances au lieu de les lui faire créer : injection par constructeur, par mutateur, rôle de l'assembleur ou du conteneur, et effet sur les tests.
- 30 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Dépendance : de quoi s'agit-il ?
Voir la réponse
Objet dont une classe a besoin pour accomplir son travail : un service d'envoi, un accès aux données, une horloge.
Le problème n'est pas d'avoir des dépendances, c'est de les créer soi-même avec
new: la classe se retrouve attachée à une implémentation précise.Quelle version de
Commandeapplique l'injection par constructeur ?Commande(Notifieur n) { this.n = n; }Commande() { this.n = new ServiceMail(); }void setNotifieur(Notifieur n) { this.n = n; }Commande() { this.n = Notifieurs.parDefaut(); }, une fabrique statique
Voir la réponse
Commande(Notifieur n) { this.n = n; }La première reçoit sa dépendance à la création. La deuxième est une injection par mutateur. Les deux autres créent ou cherchent elles-mêmes leur dépendance : la classe reste liée à une implémentation.
Une classe qui crée elle-même sa dépendance concrète avec … est liée à cette implémentation et ne peut plus être testée avec une fausse.
Voir la réponse
Une classe qui crée elle-même sa dépendance concrète avec new est liée à cette implémentation et ne peut plus être testée avec une fausse.
Le mot-clé
newdans le code métier est le signal à chercher : la création appartient à l'assembleur, pas à la classe qui utilise l'objet.Injection de dépendances : de quoi s'agit-il ?
Voir la réponse
Technique qui consiste à fournir à un objet, de l'extérieur, les objets dont il a besoin, au lieu qu'il les construise lui-même.
La classe ne connaît plus que l'interface de ce qu'elle utilise ; on peut changer l'implémentation, par exemple pour un test, sans la toucher.
Commandecrée elle-même son service avecnew ServiceMail(). Les tests envoient de vrais mails à chaque exécution. Quelle correction ?- Mettre
ServiceMailen singleton et l'appeler parServiceMail.instance() - Définir une interface
Notifieur, queCommandereçoit par son constructeur - Déplacer le
new ServiceMail()dans une méthode privée deCommande - Désactiver l'envoi dans
ServiceMailquand une variable d'environnement le demande
Voir la réponse
Définir une interface
Notifieur, queCommandereçoit par son constructeurUn singleton ou une méthode privée gardent
Commandeliée àServiceMail. Le drapeau d'environnement place du code de test dans le code de production. Seule l'injection permet de passer une doublure qui n'envoie rien.- Mettre