🎯 ¿Qué es SRP?
El Principio de Responsabilidad Única (Single Responsibility Principle) dice que cada clase o módulo debe tener una y solo una razón para cambiar. En otras palabras: cada pieza de código debe hacer una cosa, y hacerla bien.
Cuando una clase acumula demasiadas responsabilidades, los cambios en una funcionalidad pueden romper otras no relacionadas. El código se vuelve frágil, difícil de probar y de mantener.
// ❌ VIOLACIÓN SRP: La clase Usuario hace de todo
class Usuario {
constructor(nombre, email) {
this.nombre = nombre;
this.email = email;
}
// Responsabilidad 1: datos
getDatos() {
return { nombre: this.nombre, email: this.email };
}
// Responsabilidad 2: persistencia
guardarEnBD() {
console.log(`Guardando ${this.nombre} en MySQL...`);
}
// Responsabilidad 3: notificaciones
enviarEmail(asunto, cuerpo) {
console.log(`Enviando email a ${this.email}: ${asunto}`);
}
// Responsabilidad 4: reportes
generarReporte() {
return `Reporte de ${this.nombre}`;
}
}
// Si cambia la BD, toca modificar Usuario
// Si cambia el email, también. ¡Caos!
// ✅ SRP APLICADO: Cada clase tiene una sola responsabilidad
// Solo datos del usuario
class Usuario {
constructor(nombre, email) {
this.nombre = nombre;
this.email = email;
}
}
// Solo persistencia
class UsuarioRepository {
guardar(usuario) {
console.log(`Guardando ${usuario.nombre} en MySQL...`);
}
}
// Solo notificaciones
class EmailService {
enviar(usuario, asunto, cuerpo) {
console.log(`Email a ${usuario.email}: ${asunto}`);
}
}
// Solo reportes
class ReporteGenerator {
generar(usuario) {
return `Reporte de ${usuario.nombre}`;
}
}
// Cada clase cambia por una sola razón. 💪