Quando tenho muitos dados que precisam ser validados, devo criar uma nova classe com o único objetivo de validação ou devo continuar com a validação no método?
Meu exemplo particular contempla um torneio e uma classe de evento / categoria: Tournamente Event, que modela um torneio esportivo e cada torneio possui uma ou várias categorias.
Há todo tipo de coisa para validar nessas classes: os jogadores devem estar vazios, devem ser únicos, o número de partidas que cada jogador deve jogar, o número de jogadores que cada partida tem, partidas predefinidas e um grande número de itens, incluindo muito mais regras complexas.
Também há algumas partes que preciso validar como um todo, como a forma como as classes se integram. Por exemplo, a validação unitária de a Playerpode ser ótima, mas se um evento tiver o mesmo jogador duas vezes, isso é um erro de validação.
Então, e quanto a isso ?: Eu esqueço absolutamente qualquer pré-verificação ao usar os setters e métodos semelhantes das minhas classes de modelo para adicionar dados e, em vez disso, deixo as classes de validação lidar com isso.
Portanto, teremos algo como EventValidatorcom Eventcomo membro e um validate()método que valida todo o objeto, além de métodos singulares para validar as regras de todos os membros.
Então, antes de instanciar um objeto validável, executarei a validação para evitar valores ilegais.
Meu design está correto? Devo fazer algo diferente?
Além disso, devo usar métodos de validação de retorno booleano? Ou apenas lançar uma exceção se a validação falhar? Parece-me que a melhor opção seria retornar métodos booleanos e lançar a exceção quando o objeto é instanciado instantaneamente, por exemplo:
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?
}
}