Вы можете определить интерфейс Checker
, предоставляющий метод check
, исключающий исключение, когда оно имеет место.Ваш код может измениться на что-то вроде
public interface Checker {
void check() throws ValidationException;
}
public class YourClass {
private List<Checker> checkers; // initialize through (dependency inhecjetd?) constructor parameter or by simply enumerating checker in the constructor; I personally prefer the first way
public void yourMethod() {
for(Checkech checker : checkers) {
checker.check();
}
}
}
Очевидно, что вы можете добавить параметры в метод check
, чтобы предоставить данные для проверки ...
ОБНОВЛЕНО
Если у вас есть точка управления реализацией проверки условий, вы можете переключиться на что-то вроде этого (см. Комментарий @Alberto Venturini):
public interface Checker {
boolean check();
String message();
}
public class YourClass {
private List<Checker> checkers; // initialize through (dependency inhecjetd?) constructor parameter or by simply enumerating checker in the constructor; I personally prefer the first way
public void yourMethod() {
for(Checkech checker : checkers) {
if(!checker.check()) {
throw new ValidationException(checker.message());
}
}
}
}
Вы можете реализовать подобное решение с первым определением Checker
, используяпеременная Map<String, Checker>
, которая поддерживает ассоциации между условиями проверки и соответствующим сообщением об ошибке, но я определенно предпочитаю полиморфный подход, предложенный @Alberto Venturini.
Я надеюсь, что этот подход может помочь вам переместить ваш код к более открытомурешение!