Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > ¿Cómo validáis los datos a la hora de crear un objeto?

Hola a tod@s,
hablando con un compañero hemos "discutido" la forma crear un objeto y validar sus campos, es decir, os pongo dos formas de hacerlo, las que hemos comentado, y me decís cuál pensáis que es mejor y por qué. Os pongo por ejemplo a la hora de crear un objeto de la clase Persona, con el atributo dni para validar. El atributo dni es de tipo DNI, otra clase.:

- Primera forma de hacerlo:
1. Creo un método estático public static boolean esDniValido(String dni) en la clase Dni.
2. Llamo a dicho método esDniValido(), cuando leo el dni antes de crear ningún objeto Dni ni Persona.
3. Si es correcto, creo un objeto Dni, y creo un objeto Persona al que le paso dicho Dni.

- Segunda Forma de hacerlo:
1. Creo un método del objeto (no estático) en la clase Dni public boolean esDniValido(String dni), que diga si el dni es válido o no.
2. Leo datos, creo un objeto de tipo Dni, y dentro del constructor de Dni llamo al método esDniValido. Si no lo es, le doy valor null por ejemplo
3. Creo un objeto Persona con el Dni anterior (ya sea válido o inválido)

Estas son las dos formas que hemos comentado.... ¿Cuál utilizáis? ¿Cuál es la más correcta? Y sobre todo... ¿Por qué?

Gracias!

Saludos.

abril 6, 2014 | Unregistered Commentershao

¿Qué se hace si no es correcto, en el primer caso?

abril 6, 2014 | Registered Commenterchoces

Yo creo que las dos son buenas. Yo creo que el objetivo es que la validación quede en un sitio lógico e intuitivo y cualquiera que lea tu código entienda donde buscar esas validaciones.

Opción 1: Creo que es lo más clásico que se suele hacer en las aplicaciones, una clases de utilidades con distintos métodos de validación estáticos que se pueden usar en cualquier punto de la aplicación

Opción 2: La validación del Dni se hace dentro de la clase DNI, quizás los de crear un objeto antes de validad, yo validaría en el constructor, antes de crear el objeto. Pero tampoco es un mala opción

Pero si me tengo que quedar con alguna me quedo con la primera porque para el dato de DNI, la validación del DNI es muy específica y funcionaría bien. Pero en validaciones más genéricas como esUnNumero, esUnAlfaumérico, esPositivo, esObligatorio etc.... que podrían aplicarse a más de un tipo de objeto creo que es mejor la opción 1.

Pero para gustos los colores.

abril 7, 2014 | Registered Commenterantuansoft

Hola a todos,
gracias por contestar lo primero!
choces yo en el primer caso si no es correcto informaría al usuario (depende en qué tipo de app que estuviera lo haría por consola, un diálogo, ...), y volvería a pedir dicho dato, y no crear nada hasta que fuera correcto.
Yo también prefiero la primera forma de hacerlo.
Más opiniones?

Gracias y saludos!

abril 7, 2014 | Unregistered Commentershao

Buenas,

Yo creo que no se debe acoplar el código de validación al propio objeto persona. Este código tiene que ser transversal y reutilizable y el bean, al menos en un mundo ideal, deberia permanecer limpio, con sus getter y setters.

Respecto a como implementar esta validación, depende como siempre del tiempo que tengas y del tamaño del proyecto. Lo puedes hacer desde una clase de utilidad estática como planteas o puedes por ejemplo buscar una solución mucho más elegante mediante anotaciones, tal y como propone el JSR303:

https://jcp.org/en/jsr/detail?id=303
http://java.dzone.com/articles/bean-validation-made-simple

Un saludo

abril 7, 2014 | Unregistered CommenterUnoPorAhi