Patrones de diseño · Pregunta 9 de 12
Un servicio de checkout selecciona el método de pago mediante switch, y cada nuevo método de pago requiere un cambio en esta clase. ¿Qué refactorización se ajusta al principio abierto/cerrado?
1 respuesta es correcta. Medio
Mostrar solución
Solución
- A Una interfaz PaymentProviderInterface con #[AutoconfigureTag('myext.payment')], una clase por método de pago y #[AutowireIterator('myext.payment')] iterable $providers en el servicio
Explicación
El patrón strategy encapsula cada método de pago en su propia clase con una interfaz común. Mediante el tag, el contenedor recopila todas las implementaciones, y el servicio pregunta a cada una si es responsable. Los nuevos métodos de pago, también de otras extensiones, se añaden sin cambiar el servicio. Un switch extraído o una clase colectiva siguen teniendo que cambiarse con cada nuevo método.