Dependency Inversion Principle

Architecture 🟡 Mid

Definition

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.
#architecture#interview#principle