Entwurfsmuster · Frage 9 von 12
Ein Checkout-Service wählt die Zahlungsart per switch aus, jede neue Zahlungsart erfordert eine Änderung dieser Klasse. Welcher Umbau passt zum Open/Closed-Prinzip?
1 Antwort ist richtig. Mittel
Lösung anzeigen
Lösung
- A Ein Interface PaymentProviderInterface mit #[AutoconfigureTag('myext.payment')], je Zahlungsart eine Klasse, und im Service #[AutowireIterator('myext.payment')] iterable $providers
Erklärung
Das Strategie-Muster kapselt jede Zahlungsart in einer eigenen Klasse mit gemeinsamem Interface. Über das Tag sammelt der Container alle Implementierungen, der Service fragt jede, ob sie zuständig ist. Neue Zahlungsarten, auch aus anderen Extensions, kommen ohne Änderung am Service hinzu. Ein ausgelagerter switch oder eine Sammelklasse muss weiterhin für jede neue Art geändert werden.