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
Para aplicar el principio de responsabilidad 煤nica (SRP) sobre un procesador de pagos en Python, se debe organizar el c贸digo para que cada clase o m茅todo tenga una 煤nica responsabilidad. A continuaci贸n, te explicar茅 c贸mo refactorizar el c贸digo original, identificando responsabilidades y dividi茅ndolo en componentes m谩s manejables.
El c贸digo inicial conten铆a varias responsabilidades en una sola clase llamada PaymentProcessor
. Estas responsabilidades inclu铆an:
Este enfoque infringe el principio SRP, ya que una sola clase est谩 encargada de m煤ltiples tareas, lo que hace dif铆cil mantener y escalar el c贸digo.
El primer paso fue identificar las distintas responsabilidades dentro de la clase. Se encontraron cuatro bloques importantes de responsabilidades:
Se cre贸 una clase CustomerValidation
con el m茅todo validate
, encargado exclusivamente de validar los datos del cliente, como nombre y contacto. El c贸digo de validaci贸n fue extra铆do de la clase PaymentProcessor
y movido aqu铆.
Al igual que en la validaci贸n del cliente, se cre贸 una clase PaymentDataValidator
, encargada de validar los datos de pago, como la fuente de pago (por ejemplo, si se provee una tarjeta o token v谩lido).
El procesamiento de pago es una responsabilidad que corresponde a la interacci贸n con la API de Stripe. En este caso, se mantuvo esta l贸gica en una clase llamada StripePaymentProcessor
, asegurando que solo procese pagos.
Se cre贸 una clase Notifier
, que maneja el env铆o de notificaciones, ya sea por email o SMS. Esto ayuda a aislar la l贸gica de notificaciones del resto del c贸digo, permitiendo cambios futuros sin afectar otras partes.
Se a帽adi贸 una clase TransactionLogger
dedicada al registro de las transacciones. Esta clase se encarga de capturar informaci贸n de la transacci贸n y guardarla en los logs del sistema.
Se unieron todas estas clases bajo una nueva entidad PaymentService
, que orquesta la interacci贸n entre ellas. Esta clase permite coordinar la validaci贸n, procesamiento, notificaciones y registro de transacciones de manera eficiente y con SRP.
Cada clase maneja sus propias excepciones, asegurando que las validaciones levanten errores espec铆ficos cuando los datos son incorrectos. Adem谩s, se agreg贸 manejo de excepciones con try-except
para capturar fallas en el procesamiento de pagos, lo que permite gestionar errores de manera controlada.
Aportes 15
Preguntas 1
驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?