Dependency Inversion Principle
Architecture 🟡 MidDefinition
Les modules de haut niveau ne doivent pas dependre des modules de bas niveau. Les deux doivent dependre d'abstractions. Les abstractions ne dependent pas des details.
Analogie
Une prise electrique : l'appareil et le reseau dependent 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 decoupler les couches.
Anti-pattern
import direct de l'implementation concrete dans le module de haut niveau.