Patrones de Diseño y Principios SOLID
Patrones de Diseño y Principios SOLID en Python
Principios SOLID
Principio de Responsabilidad Única (SRP) en Python
Procesador de Pagos con Stripe en Python
Aplicar el Principio de Responsabilidad Única (SRP)
Principio Abierto/Cerrado (OCP) en Python
Aplicar el Principio Abierto/Cerrado (OCP)
Principio de Sustitución de Liskov (LSP) en Python
Aplicar el Principio de Sustitución de Liskov (LSP)
Principio de Segregación de Interfaces (ISP) en Python
Aplicar el Principio de Segregación de Interfaces (ISP)
Principio de Inversión de Dependencias (DIP) en Python
Aplicar el Principio de Inversión de Dependencias (DIP)
Reestructuración del proyecto
Reestructuración de un proyecto en Python
Patrones de Diseño
Introducción a los Patrones de Diseño
Patrón Strategy en Python
Implementando el Patrón Strategy
Patrón Factory en Python
Implementando el Patrón Factory
Patrón Decorator en Python
Implementando el Patrón Decorador: Mejora tu Servicio de Pagos
Patrón Builder en Python
Implementando el Patrón Builder: Construye Servicios de Pago
Patrón Observer en Python
Implementando el Patrón Observer
Patrón Chain of Responsibility en Python
Implementando el Patrón Chain of Responsibility: Flujo Eficiente de Validaciones
Patrones de Diseño y Principios SOLID en un Procesador de Pagos
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
En este fascinante recorrido por el patrón de diseño "Strategy", nos enfocamos en su aplicación a un servicio de pagos en Python. Este patrón es ideal cuando estamos frente a múltiples soluciones que abordan un mismo tipo de problema, permitiéndonos cambiar las estrategias en tiempo de ejecución. En este caso, ayudaremos a entender cómo utilizar un atributo "notificador" dentro de una clase de "PaymentService" utilizando el patrón de estrategia.
Uno de los pasos esenciales para implementar el patrón de estrategia es crear un método que permita modificar la implementación de la estrategia durante la ejecución del programa. Aquí se define un método setNotifier
dentro del servicio de pagos, donde:
print
para indicar que la implementación del notificador ha cambiado.def setNotifier(self, notifier: NotifierProtocol):
self.notifier = notifier
print("Cambiando la implementación del notificador.")
Es vital tener una función que seleccione la estrategia correcta basándose en las condiciones del problema. En este caso, se crea getNotifierImplementation
que:
def getNotifierImplementation(customer_data: CustomerData) -> NotifierProtocol:
if customer_data.contact_info.phone:
return SMSNotifier(SMSGetwayMock())
elif customer_data.contact_info.email:
return EmailNotifier()
else:
raise ValueError("No se puede elegir la estrategia correcta.")
Para lograr una correcta elección de estrategia, es esencial tener datos del cliente bien estructurados. Se recomienda definir una función get_customer_data
que prepare estos datos:
CustomerData
con información relevante como el nombre y el email.getNotifierImplementation
.def get_customer_data() -> CustomerData:
contact_info = ContactInfo(email="[email protected]")
return CustomerData(name="John Doe", contact_info=contact_info)
El cambio de estrategias en tiempo de ejecución permite adaptarse a situaciones inesperadas, como el fallo en el envío del correo. Un ejemplo de cómo podría ser gestionado es mediante:
service.setNotifier
en caso de error con la estrategia actual.def get_email_notifier() -> EmailNotifier:
return EmailNotifier()
def get_sms_notifier() -> SMSNotifier:
return SMSNotifier(SMSGetwayMock())
# Cambio manual de estrategia
try:
# Ejecutar envío con notificador actual...
except:
service.setNotifier(get_email_notifier())
El patrón de estrategia no está limitado a servicios de notificación. Por ejemplo, también es posible aplicarlo en la selección de un procesador de pagos basado en el tipo de pago que se está manejando. Esta versatilidad convierte el patrón de estrategia en una herramienta poderosa para crear aplicaciones flexibles y extensibles en Python.
El camino por el mundo de los patrones de diseño es emocionante y promete grandes beneficios a quienes los dominan. La adopción del patrón de estrategia en proyectos personales o profesionales puede representar una mejora significativa en la capacidad de adaptación y gestión de código. Te invitamos a seguir explorando y experimentando con diferentes implementaciones para llevar tus habilidades a un nuevo nivel de excelencia.
Aportes 5
Preguntas 4
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?