Dependency Inversion Principle

Architecture 🟡 Mid

Dé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

import direct de l'implémentation concrète dans le module de haut niveau.
#architecture#interview#principle

En entretien

  1. 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.

  2. 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.

  3. 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

← → au clavier pour passer d'une fiche à l'autre