Contenido del curso
Principios SOLID
- 2

Qué es el principio de responsabilidad única
Viendo ahora - 3

Procesador de pagos en Python con Stripe
11:13 min - 4

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

Principio open-closed en Python
02:39 min - 6

Clases abstractas y principio abierto-cerrado
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

Principio de segregación de interfaces en SOLID
02:33 min - 10

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

Principio de inversión de dependencias en SOLID
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

Qué es el patrón Decorator
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 aplicado a un servicio de pagos
18:54 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
02:04 min - 26

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

Código funcional vs código mantenible en Python
03:19 min
Qué es el principio de responsabilidad única
Resumen
El principio de responsabilidad única (Single Responsibility Principle o SRP) es la “S” de los principios SOLID y establece que una clase debe tener una y solo una razón para cambiar. Si escribes software y quieres código mantenible, este principio es uno de los primeros que necesitas dominar.
La idea, según Robert C. Martin, va más allá de la formalidad: aplica también a funciones. Cada pieza de tu código debería ocuparse de una sola responsabilidad, no de varias mezcladas en el mismo lugar.
¿Qué dice el principio de responsabilidad única en SOLID?
La definición formal es directa: una clase debe tener una y solo una razón para cambiar. En la práctica, esto significa que una clase o función no debería acumular tareas que pertenecen a contextos distintos.
¿Qué es el principio de responsabilidad única? Es la regla de SOLID que indica que cada clase o función debe encargarse de una sola responsabilidad y, por tanto, tener una única razón para cambiar.
Este principio nace porque, al revisar código propio o de otros, es común encontrar funciones que validan, transforman, guardan y notifican, todo en el mismo bloque. El SRP busca evitar exactamente eso.
¿Por qué importa aplicar el Single Responsibility Principle?
Cuando cada parte del código tiene una responsabilidad clara, ganas en varios frentes a la vez. No es una mejora estética, es una mejora medible en costo y velocidad de desarrollo.
- Mantenibilidad: un código ordenado por responsabilidades es más barato de modificar y de depurar. Arreglar un bug deja de ser una expedición.
- Reusabilidad: si separas, por ejemplo, una validación a su propia función, puedes reutilizarla en contextos para los que no fue pensada originalmente.
- Pruebas unitarias más simples: probar una función con una sola responsabilidad es directo. Si necesitas montar un escenario enorme para probar algo, hay demasiadas responsabilidades juntas.
- Escalabilidad: cuando cada parte hace algo específico, hacer crecer el sistema no genera efectos secundarios inesperados.
- Menor complejidad: las piezas del sistema se vuelven más pequeñas y comprensibles.
En construcción de software hay una máxima útil aquí: aumentar la cohesión y disminuir el acoplamiento. Cuando una función concentra responsabilidades distintas, sube el acoplamiento. Cuando cada función tiene su propósito, sube la cohesión.
¿Cómo identificar que necesitas aplicar SRP en tu código?
Hay señales bastante claras que aparecen en el día a día. Si reconoces estos síntomas en tu código, es momento de refactorizar.
Varias razones para cambiar una misma clase
Si la misma clase cambia cuando cambia la lógica de negocio, cuando cambia la base de datos y cuando cambia el formato de salida, estás frente a múltiples responsabilidades disfrazadas de una. Cada cambio de contexto dentro de la ejecución es una pista.
Pregúntate qué se está ejecutando realmente. Si la respuesta tiene varios “y además”, ya tienes el diagnóstico.
Alta complejidad y mantenimiento difícil
Cuando agregar un feature nuevo o resolver un bug se vuelve un proceso doloroso, no es solo cuestión del problema en sí. Suele ser síntoma de que las responsabilidades del código están mal delimitadas.
¿Cómo sé si una función tiene demasiadas responsabilidades? Si para probarla necesitas preparar muchos elementos a su alrededor, o si cambia por motivos distintos, está asumiendo más de lo que debería.
Dificultad para realizar pruebas unitarias
Las pruebas unitarias son el pilar de un ciclo de desarrollo rápido: te dicen qué falla y dónde, casi de inmediato. Cuando escribir una prueba se complica, normalmente no es culpa de la prueba, es culpa del diseño.
Si para probar una función necesitas inicializar media aplicación, esa función está cargando responsabilidades que no le tocan.
Duplicación de código
Cuando ves la misma validación, la misma transformación o la misma regla repetida en varios lugares, la responsabilidad no vive en un solo sitio. Está dispersa entre varias clases o funciones.
¿Qué hago si encuentro código duplicado? Extrae ese comportamiento a una sola función con una responsabilidad clara y úsala desde todos los lugares donde se necesite.
Esa extracción es, en esencia, aplicar SRP: una responsabilidad, un lugar, múltiples consumidores.
¿Qué métricas mejora el principio de responsabilidad única?
Aplicar SRP impacta directamente en cómo evoluciona tu software a lo largo del tiempo. No es teoría, son efectos concretos sobre el código que mantienes cada día.
- Cohesión más alta dentro de cada componente.
- Acoplamiento más bajo entre componentes.
- Mantenibilidad del sistema completo.
- Reusabilidad real de funciones y clases.
- Testabilidad sin necesidad de recurrir a paradigmas complejos de pruebas.
Cuando combinas estos efectos, el sistema se vuelve más fácil de entender, más rápido de modificar y más resistente a los errores que aparecen al escalar.
¿En qué parte del código que has trabajado crees que el principio de responsabilidad única podría haber sido la solución? Cuéntame en los comentarios cómo lo aplicaste o dónde te hubiera servido aplicarlo.