Dependency Inversion Principle
PHP 🟡 MidDéfinition
Les modules de haut niveau ne doivent pas dépendre de modules de bas niveau. Les deux doivent dépendre d'abstractions (interfaces). L'abstraction ne dépend pas des détails.
Analogie
Comme un chef qui commande 'du poisson frais' sans se soucier du fournisseur spécifique.
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 découvrir les couches de l'application et permettre le remplacement des implémentations (tests, refactoring).
Anti-pattern
new StripePayment() directement dans le service au lieu d'injecter via l'interface.