ValidaciónContextual
Escrito por Martin Fowler
Traducido por Rafael Vacas
Revisado por Jorge Ferrer
En mis esfuerzos por escribir, desde siempre he querido escribir material sobre validación. Es un tema que conduce a una gran confusión y estaría bien tener una descripción sólida de algunas de las técnicas que funcionan bien. No obstante, la vida está llena de cosas sobre las que redactar, bastantes más de las que el tiempo permite.
Algunas lecturas recientes me hicieron pensar en escribir sobre algunas cuestiones preliminares sobre el tema. Algo común que veo que hace la gente es desarrollar rutinas de validación para objetos. Estas rutinas vienen de distintas formas, pueden estar en el objeto o externo, pueden devolver un booleano o lanzar una excepción para indicar un fallo. Pero una de las cosas en las que creo que cae constantemente la gente es cuando piensa en la validez del objeto de forma independiente del contexto tal como implica el método isValid.
Creo que es mucho más útil pensar en la validación como algo que pertenece a un contexto - típicamente una acción que quieras hacer. ¿Es este pedido válido para ser procesado?, ¿es este cliente válido para registrar en el hotel?. Mucho mejor que tener métodos del tipo isValid es tener métodos como isValidForCheckIn.
Una de las consecuencias de esto es que guardar un objeto en la base de datos es en si misma una acción. Pensando de esta forma se plantean algunas cuestiones importantes. A menudo cuando se habla de validez libre de contexto, se hace en términos de guardar en una base de datos. Pero las diversas validaciones que hacen esto factible deberían responder a la pregunta "¿debería el no pasar las validaciones evitar que se guarde en la base de datos?".
En AboutFace Alan Cooper sugiere que no deberíamos dejar que nuestras ideas de lo que es válido eviten que el usuario pueda introducir (y guardar) información incompleta. Me vino esto a la cabeza hace unos días mientras leía un borrador de un libro en el que está trabajando Jimmy Nilsson. Estableció como principio que siempre debería ser posible guardar un objeto, incluso cuando tenga errores. Aunque no estoy seguro de que esta deba ser una regla absoluta, si creo que [actualmente] se tiende a evitar el guardado más de lo que se debería.

