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.

Certifications & examens

Quel examen pour la suite ?

Tu peux déjà t’entraîner pour 19 examens, 21 sont soumis au vote. Découvre toutes les certifications avec les infos officielles, vote ou propose ton examen.

Voir toutes les certifications