Dependency Inversion Principle
Architecture 🟡 MidDéfinition
Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d'abstractions. Les abstractions ne dépendent pas des détails.
Analogie
Une prise électrique : l'appareil et le réseau dépendent du standard de la prise, pas l'un de l'autre.
Exemple de code
// Haut niveau depend d'une abstraction
interface Logger { log(msg: string): void; }
class UserService {
constructor(private logger: Logger) {}
}
// Injecte ConsoleLogger ou FileLogger
Cas d'usage
Rendre le code testable en injectant des mocks et découpler les couches.
Anti-pattern
Termes liés
En entretien
Explique le Dependency Inversion Principle.
Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau : les deux doivent dépendre d'abstractions, et les abstractions ne dépendent pas des détails. C'est comme une prise électrique, où l'appareil et le réseau dépendent tous deux du standard de la prise, jamais l'un de l'autre directement.
Quel anti-pattern viole ce principe ?
Un import direct de l'implémentation concrète dans le module de haut niveau, au lieu de dépendre d'une interface.
A quoi ça sert concrètement au quotidien ?
Ça rend le code testable en permettant d'injecter des mocks, et ça découple les couches entre elles.
Fiche mise à jour le 2026-09-27