L'injection de dépendances veut dire qu'un composant reçoit ses collaborateurs de l'extérieur au lieu de les construire lui-même. Le problème qu'elle résout, c'est le couplage : si une classe crée son propre client de base de données, vous ne pouvez pas le remplacer, la tester isolément, ni contrôler sa durée de vie. Passer les dépendances par le constructeur les rend explicites, rend la classe honnête sur ce qu'elle touche, et vous laisse fournir un faux en test ou une implémentation différente par environnement.
Pourquoi les recruteurs posent cette question
Ça vérifie si vous comprenez un principe ou si vous vous contentez d'utiliser une annotation de framework. Le recruteur veut l'argument du couplage et de la testabilité, l'idée que les paramètres du constructeur documentent les vraies dépendances d'une classe, et la maturité de dire qu'il n'y a pas besoin de conteneur pour le faire. Les candidats qui ne savent pas expliquer le bénéfice sans nommer un framework n'ont en général pas ressenti la douleur qu'il soigne.
Comment structurer votre réponse
- Définissez-la comme le fait de passer les collaborateurs plutôt que de les construire.
- Nommez les deux bénéfices : testabilité et interchangeabilité.
- Faites remarquer qu'aucun framework n'est nécessaire, seulement des paramètres de constructeur.
- Donnez un exemple où ça vous a réellement fait gagner du temps.
Exemple de réponse
Ça veut simplement dire qu'on donne à une classe ce dont elle a besoin au lieu qu'elle le fabrique. Si mon service de commandes construit son propre client Postgres dans le constructeur, il est soudé à Postgres et à la chaîne de connexion présente dans l'environnement, et tout test de cette classe devient un test d'intégration. S'il prend une interface de dépôt en paramètre de constructeur, je passe la vraie en production et une en mémoire en test, et la classe s'en moque. Le bénéfice que j'ai appris à valoriser davantage avec le temps, c'est l'honnêteté : la signature du constructeur vous dit exactement ce que cette chose touche, donc quand une classe prend sept dépendances, c'est un défaut de conception qui se voit plutôt qu'un défaut qu'on va chercher. Je veux être clair sur le fait que je ne pense pas qu'il faille un conteneur. Sur les petits services, je câble tout à la main dans un seul fichier de composition, et ce fichier devient la carte du système. Les frameworks aident une fois que le câblage devient fastidieux, pas avant.
Vous passez cet entretien bientôt ? GhostPilot écoute votre appel en direct, repère la question dès qu'elle est posée et affiche une réponse structurée à l'écran en temps réel. Essayez-le lors de votre prochain entretien blanc, ou prenez un Session Pass à $29, sans abonnement, pour le jour J.
Voir comment ça marcheQuestions de relance à prévoir
- Quand un conteneur d'injection ajoute-t-il plus de complexité qu'il n'en retire ?
- Comment gérez-vous la durée de vie d'une dépendance injectée ?
- En quoi est-ce différent du motif service locator ?
Autres questions pour Ingénieur logiciel
Votre recruteur posera sa propre version de celle-ci. Collez votre véritable fiche de poste dans le Question Predictor gratuit et obtenez les 20 questions que ce poste a le plus de chances de poser, avec ce que chacune cherche vraiment à sonder.
Prédire mes questions