Refactorización de código para mejorar legibilidad y mantenimiento
Resumen
La refactorización del código es necesaria para mejorar continuamente su calidad, legibilidad y mantenimiento, permitiendo futuros desarrollos más profesionales. Un código bien organizado facilita su comprensión y facilita su crecimiento de manera eficaz.
¿Qué significa realmente refactorizar el código?
Refactorizar implica reorganizar un código ya existente de forma tal que el resultado siga siendo funcional, pero mejor estructurado. No significa que el código actual esté mal escrito, sino que necesita evolucionar para facilitar futuras modificaciones. Las mejoras buscan reducir la complejidad visual, la indentación y aumentar la cohesión interna del código.
¿Por qué dividir responsabilidades mejora la legibilidad del código?
Cuando el código está escrito en métodos separados y específicos, es más fácil entender claramente la función puntual que desempeña cada sección. Algunas ventajas claras son:
Código visualmente limpio, con menor indentación.
Facilidad para modificar o agregar futuros cambios.
Rápida detección y arreglos de errores.
¿Cómo crear métodos específicos para reducir la complejidad?
En lugar de tener un método largo difícil de leer, es práctico extraer ciertas lógicas hacia métodos individuales:
Organiza el código en métodos cortos que realicen tareas específicas.
Mejora la legibilidad utilizando nombres claros y explícitos para cada método.
Realiza funciones puntuales fácilmente reutilizables y testeables.
Por ejemplo, una validación directa podría separarse claramente así:
validarCampoRequerido(campo, valor){return valor ===null|| valor ===''?'Este campo es obligatorio.':null;}
¿Cómo manejar casos específicos como el valor cero?
En validaciones anteriores, valores como '0' eran tratados incorrectamente como campos vacíos. La solución radica en definiciones explícitas y precisas del valor a validar:
Considera explícitamente valores como null o cadenas vacías para indicar que un campo es obligatorio.
Acepta valores válidos, aunque sean cero, especificándolo en la condición del método.
Por ejemplo:
validarValor(campo, valor){if(valor ===null|| valor ===''){return`El ${campo} es obligatorio.`;}returnnull;}
Estos ajustes mejoran considerablemente la precisión y utilidad de la función.
¿Qué ventaja tiene convertir reglas en clases separadas?
Mover las reglas de validación a clases separadas, como implementa Laravel, amplifica la flexibilidad y facilita su mantenimiento. Cada regla aislada en su clase logra:
Adaptabilidad y personalización sencilla.
Mayor orden al momento de añadir nuevas características.
Multiplica la palanca de reutilización en distintas partes del proyecto.
Separar responsabilidades en pequeñas unidades dentro del código produce códigos claramente organizados, fáciles de mantener, entender y escalar. Invita a evaluar tus métodos y organización actuales y prueba gradualmente estas mejoras para fortalecer tu estilo de programación.
¿Has experimentado alguna situación específica de refactorización reciente? ¡Anímate a compartir tu experiencia en los comentarios!
Así quedaron mis validaciones, a mi parecer validateMin y ValidateMax podrian ser una sola que se le indique por parametro si quiere validar max o min:
public function hasError($name, $param, $field, $value): ?string
{
return match ($name) {
'required' => $this->validateRequired($field, $value),
'min' => $this->validateMinLength($field, $value, $param),
'max' => $this->validateMaxLength($field, $value, $param),
'url' => $this->validateUrl($field, $value),
default => NULL
};
}
public function validateRequired($field, $value): ?string
{
return ($value === NULL || $value === '') ? "$field is required." : NULL;
}
public function validateMaxLength($field, $value, $limit):?string
{
return strlen($value) > $limit ? "$field must not exceed $limit characters." : NULL;
}
public function validateMinLength($field, $value, $limit):?string
{
return strlen($value) < $limit ? "$field must be at least $limit characters." : NULL;
}
public function validateUrl($field, $value){
return filter_var($value, FILTER_VALIDATE_URL) === FALSE ? "$field must be a valid URL" : NULL;
}
``` public function hasError($name, $param, $field, $value): ?string { return match ($name) { 'required' => $this->validateRequired($field, $value), 'min' => $this->validateMinLength($field, $value, $param), 'max' => $this->validateMaxLength($field, $value, $param), 'url' => $this->validateUrl($field, $value), default => NULL }; }
  public function validateRequired($field, $value): ?string { return ($value === NULL || $value === '') ? "$field is required." : NULL; }
  public function validateMaxLength($field, $value, $limit):?string { return strlen($value) > $limit ? "$field must not exceed $limit characters." : NULL; }
  public function validateMinLength($field, $value, $limit):?string { return strlen($value) < $limit ? "$field must be at least $limit characters." : NULL; } public function validateUrl($field, $value){ return filter\_var($value, FILTER\_VALIDATE\_URL) === FALSE ? "$field must be a valid URL" : NULL; }
un detalle que no sabia:
En PHP, cuando una función declara que devuelve ?string, significa que el valor de retorno puede ser unstringo puede sernull.