Dependency Inversion Principle
PHP 🟡 MidDefinition
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.