Contenido del curso
Principios SOLID
- 2

Principio de responsabilidad única en SOLID
05:59 min - 3

Refactorizando código Python con principios SOLID
11:14 min - 4

Cómo aplicar SRP en un procesador de pagos con Stripe
25:19 min - 5

Open Closed Principle: extensión sin modificación
02:39 min - 6

Cómo usar clases abstractas en Python
14:46 min - 7

Principio de Liskov en S.O.L.I.D.
03:18 min - 8

Principio de sustitución de Liskov en Python
06:38 min - 9

Interface Segregation: cuándo separar contratos
02:33 min - 10

Segregación de interfaces en procesadores de pagos
09:05 min - 11

Principio de inversión de dependencias explicado
04:13 min - 12

Principio de inversión de dependencias: servicio de pagos flexible
05:56 min
Reestructuración del proyecto
Patrones de Diseño
- 14

Qué son los patrones de diseño: definición y categorías
03:54 min - 15

Strategy Pattern con Python y setprocessor
01:55 min - 16

Strategy Pattern para pagos en Python
10:58 min - 17

Factory Pattern: centralizar creación de objetos
03:04 min - 18

Patrón Factory para procesar pagos con match
11:06 min - 19

Patrón Decorator en 5 pasos para funcionalidad dinámica
03:06 min - 20

Patrón decorador en servicios de pagos
12:57 min - 21

Builder Pattern: construcción paso a paso
01:28 min - 22

Builder pattern para servicios de pagos
18:55 min - 23

Observer Pattern en sistemas de eventos
01:48 min - 24

Observer en sistemas de pagos con Python
11:11 min - 25

Chain of Responsibility para validar pagos
Viendo ahora - 26

Chain of Responsibility en servicios de pagos
16:27 min - 27

Arquitectura robusta para procesadores de pago
03:19 min
Chain of Responsibility para validar pagos
Resumen
Procesar solicitudes de forma ordenada y flexible es una necesidad frecuente en sistemas de pagos, autenticación y validación de datos. El patrón Chain of Responsibility ofrece exactamente eso: una cadena donde cada eslabón tiene una única responsabilidad y puede aceptar o rechazar la solicitud antes de pasarla al siguiente.
¿Qué es el patrón Chain of Responsibility y cómo funciona?
El Chain of Responsibility es un patrón de diseño de comportamiento que define un flujo de procesamiento de solicitudes a través de distintos manejadores [0:14]. Cada manejador tiene una responsabilidad única y puede aplicar condiciones específicas para determinar si la solicitud es válida o debe ser rechazada.
La estructura se basa en una clase o interfaz llamada Validator que define dos métodos fundamentales [0:36]:
- Set Next: establece el siguiente elemento dentro de la cadena de validaciones.
- Validate: verifica si lo que está llegando es válido o no.
A partir de esta abstracción se crean implementaciones concretas. En el ejemplo de un servicio de pagos, se definen tres validadores específicos [0:52]:
- Validador de monto.
- Validador de tarjeta.
- Validador de fraude.
Cada uno evalúa un aspecto diferente de la solicitud. Si el primero aprueba, pasa al segundo; si el segundo aprueba, pasa al tercero. Si alguno detecta un problema, la cadena se interrumpe y la solicitud se rechaza.
¿Cuándo aplicar la cadena de responsabilidad en un proyecto?
Este patrón es ideal cuando se necesita procesar una solicitud a través de una serie de pasos [1:04]. No se limita a pagos: cualquier sistema que requiera autenticación es un caso de uso claro. Por ejemplo, se valida que el usuario esté autenticado, que esté autorizado y que cumpla con los requerimientos para solicitar una acción dentro del servicio [1:15].
También resulta útil cuando se busca una estructura flexible de validación de datos, donde los pasos puedan agregarse, eliminarse o reordenarse sin afectar el resto del flujo.
¿Cómo se implementa paso a paso?
La implementación sigue cuatro pasos claros [1:30]:
- Definir una interfaz o clase abstracta para los manejadores.
- Implementar cada manejador que herede de esa abstracción.
- Configurar la cadena de manejadores estableciendo el orden con Set Next.
- Enviar la solicitud al primer manejador de la cadena.
Cada manejador se encarga de validar la información, decidir si es válida y pasar al siguiente manejador o directamente rechazarla [1:48]. Este enfoque basado en abstracciones permite extender la cadena sin modificar el código existente, respetando el principio de abierto/cerrado.
¿Por qué las abstracciones son clave en este patrón?
Al igual que otros patrones de diseño de comportamiento, el Chain of Responsibility se fundamenta en abstracciones [1:58]. La interfaz Validator actúa como contrato que todos los manejadores deben cumplir. Esto significa que agregar un nuevo tipo de validación, por ejemplo un validador de límite diario, solo requiere crear una nueva clase que implemente la misma interfaz y conectarla a la cadena.
Esta separación de responsabilidades hace que cada validador sea independiente, fácil de probar y reutilizable en diferentes contextos del sistema.
¿Qué feature modificarías dentro de un servicio de pagos para aplicar este patrón? Comparte tu idea en los comentarios.