Dependency Inversion Principle

PHP 🟡 Mid

Definition

Les modules de haut niveau ne doivent pas dependre de modules de bas niveau. Les deux doivent dependre d'abstractions (interfaces). L'abstraction ne depend pas des details.

Analogie

Comme un chef qui commande 'du poisson frais' sans se soucier du fournisseur specifique.

Exemple de code

// Haut niveau depend de l'abstraction
class OrderService {
  public function __construct(
    private PaymentGateway $gateway // interface
  ) {}
}
// Bas niveau implemente l'abstraction
class StripePayment implements PaymentGateway { }

Cas d'usage

Pour decouvrir les couches de l'application et permettre le remplacement des implementations (tests, refactoring).

Anti-pattern

new StripePayment() directement dans le service au lieu d'injecter via l'interface.
#core#interview#solid