Cuando tengo muchos datos que necesitan ser validados, ¿debo crear una nueva clase con el único propósito de validación o debo seguir con la validación dentro del método?
Mi ejemplo particular contempla un torneo y una clase de evento / categoría: Tournament
y Event
, que modela un torneo deportivo y cada torneo tiene una o varias categorías.
Hay todo tipo de cosas para validar en estas clases: los jugadores deben estar vacíos, deben ser únicos, la cantidad de partidos que cada jugador debe jugar, la cantidad de jugadores que tiene cada partido, enfrentamientos predefinidos y un gran etcétera que incluye mucho más. reglas complejas
También hay algunas partes que necesito validar en su conjunto, como la forma en que las clases se integran entre sí. Por ejemplo, la validación unitaria de a Player
puede estar bien, pero si un evento tiene el mismo jugador dos veces, eso es un error de validación.
Entonces, ¿qué tal esto ?: Me olvido de absolutamente cualquier verificación previa cuando uso los setters de mis clases de modelo y métodos similares para agregar datos y en su lugar dejo que las clases de validación se encarguen de eso.
Entonces tendremos algo así como EventValidator
un Event
como miembro, y un validate()
método que valida todo el objeto, además de métodos singulares para validar las reglas de todos los miembros.
Luego, antes de crear una instancia de un objeto validable, ejecutaré la validación para evitar valores ilegales.
¿Es correcto mi diseño? ¿Debo hacer algo diferente?
Además, ¿debo usar métodos de validación de retorno booleanos? ¿O simplemente lanzar una excepción si la validación falla? Me parece que la mejor opción serían los métodos de retorno booleanos y lanzar la excepción cuando se crea una instancia del objeto, por ejemplo:
public Event() {
EventValidator eventValidator = new EventValidator(this);
if (!eventValidator.validate()) {
// show error messages with methods defined in the validator
throw new Exception(); // what type of exception would be best? should I create custom ones?
}
}