Principes de l’inversion de contrôle
Comprendre pourquoi et quand inverser les dépendances.
Principes de l’inversion de contrôle est une leçon TypeScript Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage TypeScript Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours TypeScript Academy comprend 4 leçons au total.
Dépendances codées en dur
Lorsqu’une classe crée elle-même ses collaborateurs avec new, elle est fortement couplée à ces types concrets. Il devient alors difficile de la reconfigurer et de la tester.
Un exemple fortement couplé
Ici, le service construit son propre outil de journalisation. Il est impossible de lui substituer un autre outil de journalisation sans modifier la classe.
class ConsoleLogger { log(m: string) { console.log(m); } }
class OrderService {
private logger = new ConsoleLogger(); // hard-coded
place() { this.logger.log("order placed"); }
}
new OrderService().place();Qu’est-ce que l’inversion de contrôle ?
L’inversion de contrôle (IoC) inverse la responsabilité de choisir les dépendances. Au lieu de les créer, la classe les reçoit d’un élément extérieur. Elle déclare ce dont elle a besoin et le reçoit.
Injection de dépendances
L’injection de dépendances (DI) est la manière courante de parvenir à l’IoC : transmettez les collaborateurs au lieu de les construire en interne. L’appelant contrôle l’implémentation utilisée.
La version avec injection
Désormais, l’outil de journalisation est fourni de l’extérieur. Le service ne sait plus quel outil de journalisation concret il a reçu et n’a pas à s’en préoccuper.
class OrderService {
constructor(private logger: { log(m: string): void }) {}
place() { this.logger.log("order placed"); }
}
new OrderService(new ConsoleLogger()).place();Pourquoi l’IoC améliore la facilité des tests
Comme les dépendances viennent de l’extérieur, les tests peuvent recevoir des implémentations factices ou des espions. Vous pouvez vérifier le comportement sans véritables entrées-sorties, bases de données ni appels réseau.
const calls: string[] = [];
const fakeLogger = { log: (m: string) => calls.push(m) };
new OrderService(fakeLogger).place();
console.log(calls); // ["order placed"]Dépendre d’abstractions
L’IoC fonctionne mieux lorsque les classes dépendent d’une interface plutôt que d’une classe concrète. Toute implémentation qui respecte l’interface peut être injectée.
interface Logger { log(m: string): void; }
class OrderService {
constructor(private logger: Logger) {}
}Injection par constructeur
L’injection par constructeur transmet les dépendances comme paramètres du constructeur. Elles sont disponibles immédiatement et peuvent être marquées readonly, ce qui les rend explicites et obligatoires.
class OrderService {
constructor(private readonly logger: Logger) {}
}Injection par propriété
L’injection par propriété définit une dépendance sur une propriété publique ou modifiable après la construction. Elle est plus flexible, mais permet à l’objet d’exister temporairement sans cette dépendance.
class OrderService {
logger!: Logger; // set after construction
place() { this.logger.log("placed"); }
}
const s = new OrderService();
s.logger = new ConsoleLogger();Choisir un style
Préférez l’injection par constructeur pour les dépendances obligatoires, car l’objet n’est jamais dans un état partiellement construit. Utilisez l’injection par propriété pour les collaborateurs facultatifs ou pour briser les cycles de construction.
Aperçu des conteneurs IoC
Dans les grandes applications, câbler les dépendances manuellement devient fastidieux. Un conteneur IoC automatise leur création et leur fourniture ; les prochaines leçons étudient ce fonctionnement avec InversifyJS.
Vérification rapide
Vérification rapide de cette leçon.
Récapitulatif
L’inversion de contrôle déplace la création des dépendances à l’extérieur de la classe ; l’injection de dépendances les fournit à la classe. Dépendez d’interfaces, préférez l’injection par constructeur pour les dépendances obligatoires et facilitez les tests en injectant des implémentations factices.
Questions Fréquemment Posées
La leçon « Principes de l’inversion de contrôle » est-elle gratuite ?
Oui — le texte complet de « Principes de l’inversion de contrôle » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours TypeScript Academy, passe à CoddyKit PRO. Le cours TypeScript Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Principes de l’inversion de contrôle » ?
Comprendre pourquoi et quand inverser les dépendances. Tu pratiques TypeScript Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer TypeScript Academy ?
Aucune expérience préalable n'est requise. TypeScript Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Principes de l’inversion de contrôle » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon TypeScript Academy ?
Oui. Chaque leçon TypeScript Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Principes de l’inversion de contrôle
- Injection par constructeur
- Conteneurs DI avec InversifyJS
- Jetons de service sûrs du point de vue du typage