Contenido del curso

Principios SOLID

Patrones de Diseño

Principio de responsabilidad única en SOLID

Resumen

Aplicar el principio de responsabilidad única fortalece el diseño del software desde la base. Con foco en claridad y orden, este enfoque, propuesto por Robert C. Martin, ayuda a escribir código más fácil de mantener, probar y escalar, evitando efectos secundarios innecesarios y costos de cambio altos.

¿Qué es el principio de responsabilidad única y cómo se define?

El SRP establece que una clase debe tener una y solo una razón para cambiar. También puede extrapolarse a funciones: cada componente debe tener una responsabilidad única.

  • Definición formal según Robert C. Martin: una sola razón para cambiar.
  • Aplicación práctica: separar responsabilidades en clases o funciones pequeñas.
  • Efecto directo: menos áreas del sistema impactadas por una modificación.

¿Por qué concentrar una sola responsabilidad?

Porque cuando una clase o función hace “demasiado”, el código se desordena. Aparecen múltiples razones para cambiar y, por tanto, más riesgo y costo.

  • Código con muchas responsabilidades: difícil de entender y de modificar.
  • Una responsabilidad única: cambios focalizados y predecibles.

¿Cómo se relaciona con Single Responsibility Principle?

El término en inglés, Single Responsibility Principle, resume la idea central: cada pieza del sistema debe encargarse de una sola cosa.

¿Qué beneficios ofrece: mantenibilidad, reusabilidad y escalabilidad?

Separar responsabilidades trae ventajas claras en el ciclo de vida del software. Cuando el diseño es claro, es más simple evolucionar el sistema sin romper otras partes.

  • Mantenibilidad: menos desorden, menor costo de modificación y corrección de bugs.
  • Reusabilidad: componentes pequeños y específicos se pueden usar en múltiples contextos.
  • Pruebas unitarias: preparar escenarios es más simple cuando cada función hace una sola cosa.
  • Escalabilidad del sistema: crecer sin efectos secundarios inesperados.
  • Menor complejidad: cada parte es más simple de razonar y cambiar.

¿Cómo impacta en pruebas unitarias?

Las pruebas unitarias son un pilar del desarrollo de software. Con SRP, probar es más directo.

  • Preparación sencilla: menos dependencias y configuraciones.
  • Validación enfocada: se prueba comportamiento específico.
  • Ciclo de desarrollo más rápido: errores detectados antes, con menos fricción.

¿Qué pasa con cohesión y acoplamiento?

Una máxima del diseño indica: aumentar la cohesión y disminuir el acoplamiento.

  • SRP aumenta la cohesión: cada clase o función tiene un propósito claro.
  • SRP disminuye el acoplamiento: menos dependencias entre partes del sistema.

¿Cómo reconocer cuándo aplicar SRP en tu código?

Hay señales claras que indican que una clase o función asume demasiado. Identificarlas a tiempo evita costos y bloqueos futuros.

  • Varias razones para cambiar: múltiples motivos de modificación en una misma pieza.
  • Cambios de contexto: la lógica salta entre responsabilidades distintas.
  • Alta complejidad y difícil mantenimiento: agregar un feature o arreglar un error resulta costoso.
  • Dificultad para realizar pruebas unitarias: demasiada preparación alrededor de la función que se quiere probar.
  • Duplicación del código: la misma validación o comportamiento repetido en varios lugares.

¿Qué hacer ante duplicación de responsabilidades?

Extraer y centralizar.

  • Mover la lógica repetida a una función única.
  • Reutilizar esa función donde se requiera el mismo comportamiento.
  • Reducir errores al tener una sola fuente de verdad.

¿Cómo actuar cuando hay múltiples responsabilidades?

Dividir y delimitar.

  • Identificar qué hace cada segmento de la clase o función.
  • Separar en componentes con responsabilidades únicas.
  • Aislar efectos secundarios y facilitar pruebas.

Comparte en comentarios: ¿en qué partes de tu código aplicarías el principio de responsabilidad única? Si ya lo usaste, ¿cómo lo implementaste y qué resultados obtuviste?