Principio SOLID de responsabilidad única

Posted on March 24, 2025
Profile
Gastón Gaitan
March 24, 2025 · 3 months, 3 weeks ago
Principio SOLID de responsabilidad única

Principio de Responsabilidad Única (SRP)

El Single Responsibility Principle (SRP) es el primero de los cinco principios SOLID de diseño orientado a objetos. Establece que una clase debe tener una, y solo una, razón para cambiar.

Ejemplo que viola el SRP

class Usuario {
    constructor(nombre, email) {
        this.nombre = nombre;
        this.email = email;
    }
    
    guardarEnDB() {
        // Lógica para guardar en base de datos
    }
    
    enviarEmailBienvenida() {
        // Lógica para enviar email
    }
    
    generarReporteActividad() {
        // Lógica para generar reporte
    }
}

Esta clase tiene múltiples responsabilidades: gestión de datos, persistencia, comunicación y generación de reportes.

Ejemplo que cumple con SRP

class Usuario {
    constructor(nombre, email) {
        this.nombre = nombre;
        this.email = email;
    }
}

class UsuarioDB {
    guardar(usuario) {
        // Lógica para guardar en base de datos
    }
}

class EmailService {
    enviarBienvenida(usuario) {
        // Lógica para enviar email
    }
}

class ReporteService {
    generarActividad(usuario) {
        // Lógica para generar reporte
    }
}

Cada clase tiene ahora una única responsabilidad bien definida.

Beneficios de aplicar SRP

  • Mantenibilidad: Cambios afectan solo a una clase específica
  • Legibilidad: El código es más fácil de entender
  • Testabilidad: Más fácil de probar con tests unitarios
  • Reusabilidad: Clases pueden ser reutilizadas en otros contextos
  • Menos errores: Cambios tienen menos efectos secundarios

¿Cómo identificar violaciones de SRP?

Algunas señales de que una clase tiene demasiadas responsabilidades:

  • Tiene muchos métodos que no están relacionados entre sí
  • Requiere frecuentes modificaciones por diferentes razones
  • Es difícil de nombrar (usando "y", "o", "Manager")
  • Tiene muchas dependencias externas
  • Es difícil de testear porque hace demasiadas cosas

Recuerda: "Una clase debe tener una sola razón para cambiar". Este simple principio puede mejorar significativamente la calidad de tu código.