Curso de Patrones de Diseño y SOLID en Python

Qué es el principio de responsabilidad única

Curso de Patrones de Diseño y SOLID en Python

Contenido del curso

Principios SOLID

Patrones de Diseño

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.