Design patterns · Question 9 sur 12
Un service de checkout sélectionne le moyen de paiement via switch, et chaque nouveau moyen de paiement exige une modification de cette classe. Quel refactoring respecte le principe ouvert/fermé ?
1 réponse est correcte. Moyen
Afficher la solution
Solution
- A Une interface PaymentProviderInterface avec #[AutoconfigureTag('myext.payment')], une classe par moyen de paiement, et #[AutowireIterator('myext.payment')] iterable $providers dans le service
Explication
Le pattern Strategy encapsule chaque moyen de paiement dans sa propre classe avec une interface commune. Via le tag, le conteneur rassemble toutes les implémentations, et le service demande à chacune si elle est compétente. De nouveaux moyens de paiement, y compris issus d'autres extensions, s'ajoutent sans modifier le service. Un switch extrait ou une classe fourre-tout doivent toujours être modifiés pour chaque nouveau moyen.