¿Alguna vez has sentido ese miedo de mover una sola línea de código porque sabes que algo en la otra punta del sistema se va a romper? A mí me pasó.
Durante mucho tiempo, me limité a seguir herencias de códigos mal diseñados; simplemente “planchaba” una funcionalidad tras otra sobre lo que ya existía, sin mejorar nada, por miedo o por falta de tiempo. Pero aprendí que programar no es solo que funcione hoy, sino que sea mantenible mañana.
Hoy quiero empezar con el primer pilar que cambió mi forma de ver el software: la S de SOLID.
S: Single Responsibility (Responsabilidad Única)
Parece obvio: una clase debe tener una sola razón para existir. Solemos aceptar que una clase User no debería procesar pagos ni enviar emails masivos, ¿verdad? Pero caemos en trampas más sutiles. A veces le metemos la validación de contraseñas, la lógica del login y hasta el manejo de la sesión.
El resultado: Una clase que sabe demasiado y que se vuelve imposible de testear o cambiar. Un usuario es una entidad, no un orquestador de seguridad.
El cambio en el código
En lugar de tener una clase “Navaja Suiza”, separamos los datos de la lógica de infraestructura:
// La Entidad: Solo representa qué es un usuario y sus datos esenciales
class Usuario {
public string $email;
public string $passwordHash;
}
// El Servicio: Se encarga de la lógica de autenticación
class AuthService {
private $hasher;
public function __construct(PasswordHasher $hasher) {
$this->hasher = $hasher;
}
public function login(Usuario $user, string $password) {
if ($this->hasher->verify($password, $user->passwordHash)) {
// Lógica para iniciar sesión...
}
}
}
No solo escribas código, haz ingeniería
Los invito a que dejemos de ser los que solo “siguen planchando” código sobre código. Hagamos el cambio: cuando encuentres una función mal hecha, no solo añadas la tuya encima. Refactoriza, limpia y aplica SRP (Single Responsibility Principle).
Deja el código más bello y legible de como lo encontraste. Ten por seguro que el siguiente desarrollador que lea tu trabajo dirá: “Gracias”.
¿Te ha pasado algo similar con el código legacy? ¡Te leo en los comentarios! 👇
