Questo è un follow-up di questa domanda . Ho deciso di implementare ciò che la risposta accettata suggerisce, tuttavia, mi sono reso conto che avevo bisogno anche di metodi pubblici individuali per ogni membro che l'entità da convalidare ha, quindi non è solo convalidato nel suo insieme, ma anche i suoi membri come unità separate:
Questo è ciò che è stato suggerito:
public interface Validable {
public void setValidator(Validator validator);
public void validate() throws ValidationException;
public List<String> getMessages();
}
public interface Validator<T> {
public boolean validate(T e);
public List<String> getValidationMessages();
}
public class EventValidator implements Validator<Event> {
public boolean validate(Event e) {
// validate each member here, as well as the entity as a whole
return isValid;
}
// etc...
}
Ma ora ho bisogno di metodi pubblici per ogni membro di Event
. Il motivo è utilizzare ognuno di questi metodi in Event
setter e metodi con uno scopo simile, come aggiungere elementi a un elenco o a un dizionario, inizializzare i dati, modificare i dati, ecc.
Quindi mi servirebbe qualcosa come:
public class EventValidator implements Validator<Event> {
// Validates the whole object
public boolean validate(Event e) {
// ...
}
public boolean validatePlayers() {
// ...
}
public boolean validateCourts() {
// ...
}
public boolean validateMatches() {
// ...
}
}
Questa prima cosa che posso vedere è che devi convertire il parametro Event e
nel metodo "main" validate(Event e)
in una variabile membro in modo che il resto dei metodi possa accedervi. Ma questo viola l'intero punto di questo progetto, che stava separando l'entità dal validatore.
Quale sarebbe il design più adatto a coprire le mie esigenze? Non mi interesserebbe se dovessi ricominciare da zero e dimenticare completamente il design attuale.