Ваш текущий дизайн для валидаторов таков, что они возвращают истину / ложь и делают другую информацию, но вы должны получить некоторые подробности о сбое, поэтому вы должны изменить интерфейс или согласиться с тем, что единственное, что вы можете регистрировать, этоValidtorXyz сказал «нет».
Поддерживать разделение интересов:
- Валидатор проверяет и разумно сообщает , почему проверка не пройдена
- Регистраторрегистрирует информацию, поэтому, если бы он знал , почему он мог бы зарегистрировать ее, в другом сценарии пользовательский интерфейс мог бы отобразить , почему
Так что ведение журнала оченьявно не ответственность валидатора.
Добавление getValidationDescription () к интерфейсу не кажется мне плохим.Для любого объекта вполне законно описывать себя - у нас везде есть методы toString ().Нельзя сказать, что это используется специально для ведения журнала.
Однако сложный валидатор, например валидатор даты, может завершиться ошибкой по нескольким причинам (например, плохо отформатированный ввод, месяц вне диапазона ...), поэтомуЯ думаю, что вам было бы лучше иметь как часть результата reasonForFailure.
Один подход: создать объект возвращаемого типа.
class ValidationResult{
boolean isValid;
String validationDescription;
String failureReason;
}
другой подход обеспечивает возврат при сбое
validate(String input, IOnError callThisOnError);
, где основное обеспечивает:
class OnError implements IOnError {
void reportError(String input, String failureReason);
}