Refactorizar una clase Validator en PHP significa reorganizar el código para que sea más legible, mantenible y escalable, sin alterar su funcionamiento. Si trabajas con validaciones en proyectos PHP y quieres que tu código crezca con orden, aquí verás cómo separar responsabilidades y mejorar la lectura línea por línea.
¿Por qué refactorizar el código de una clase Validator?
El código no es estático. Aunque tu clase funcione, eso no significa que esté lista para crecer. Cuando una línea es tan larga que necesitas hacer scroll horizontal para leerla completa, o cuando la indentación se vuelve un laberinto, ya tienes señales claras de que es momento de reorganizar.
¿Qué es refactorizar? Es mejorar la estructura interna del código sin cambiar su comportamiento externo. El resultado sigue siendo el mismo, pero el código queda más limpio.
En la clase Validator que tenemos como punto de partida, todo funciona: al hacer clic en registrar, las validaciones se activan y los mensajes aparecen. Pero leer cada regla cuesta esfuerzo. Ahí está el problema que vamos a resolver.
¿Cómo reducir la indentación extrayendo métodos?
La primera mejora es atacar la indentación excesiva. Cuando una condición tiene mucha lógica anidada, conviene extraerla a un método con un nombre que explique qué hace [00:46].
El proceso es directo:
- Identifica el bloque de código que tiene demasiada sangría.
- Córtalo y muévelo a un nuevo método con parámetros claros, por ejemplo el nombre del campo y su valor.
- Reemplaza el bloque original por una llamada al nuevo método.
Con esto logras leer la línea completa sin scroll y el método principal queda mucho más corto. Que un método quede corto es buena señal: indica que su responsabilidad está acotada.
¿Cómo separar cada regla de validación en su propio método?
La segunda mejora apunta a la organización lógica. Cada regla de validación debe vivir en un método independiente. Así, cuando necesites modificar la regla required, sabes exactamente dónde tocar.
¿Qué orden conviene para los parámetros?
Un detalle pequeño pero importante: el orden de los parámetros facilita la lectura. Pasar primero el campo y luego el valor describe la intención casi como una frase en voz alta.
Dentro del nuevo método, por ejemplo validarReglaRequerida, retornas la condición que antes estaba enredada en el flujo principal. El código se vuelve plano, sin espacios extra, y termina con un punto y coma limpio [01:30].
¿Refactorizar significa que mi código estaba mal? No. Refactorizar es evolucionar el código para que sea más legible y para que tu yo del futuro lo entienda sin esfuerzo.
¿Cómo manejar el valor cero en una validación required?
Acá viene un detalle que muchos pasan por alto. Si pruebas la validación con el valor 0, el sistema responde que el título es obligatorio. ¿Por qué, si estás enviando un valor?
El problema está en cómo se evalúa la condición. PHP considera el 0 como un valor falso en comparaciones laxas, así que la regla required lo rechaza por error. La solución es ser más estricto en la comprobación.
La lógica corregida queda así:
- Verifica si el valor es
null o si no tiene ningún valor real.
- Si se cumple esa condición, devuelve el mensaje de campo obligatorio.
- Si no, retorna
null para indicar que la validación pasó.
Con ese ajuste, el 0 se acepta como un valor válido y la regla cumple su propósito real: detectar ausencia de dato, no falsedad numérica [02:25].
¿Qué hacer cuando el proyecto crece más allá de los métodos?
Separar reglas en métodos es el primer nivel. Si tu proyecto crece, el siguiente paso natural es convertir cada regla en una clase independiente. Así trabaja Laravel: cada regla de validación vive en su propia clase, con su propia lógica y mensaje.
Mientras tanto, tu trabajo es claro:
- Separa las responsabilidades dentro de la clase Validator.
- Crea métodos adicionales para cada regla.
- Mantén el método principal corto y enfocado en orquestar.
Refactorizar no es señal de que escribiste mal. Es la forma en que tu código madura junto a tu proyecto. ¿Tú cómo organizas tus validaciones en PHP? Cuéntame en los comentarios.