Класс валидатора, который проверяет по нескольким простым критериям - это Бог-объект?

У меня есть класс Java Validator. Это проверяет некоторый файл. Вот это в псевдокоде:

public class Validator {
    Collection<ValidationMessage> validationMessages;

    class ValidationMessage {
    }

    enum MessageType {
    }

    public validate(lines) throws ValidationException {
        for (line : lines) {
            validateCriteriaA(line)
            validateCriteriaB(line)
            ... 
            validateCriteriaF(line)
        }
        if (...)
            throw new ValidationException();
    }

    private validateCriteriaA(Line line) {
        if (...) {
            validationMessages.add("criteria failed")
        }
    }
    private validateCriteriaB(Line line)
    private validateCriteriaC(Line line)
    private validateCriteriaD(Line line)
    private validateCriteriaE(Line line)
    private validateCriteriaF(Line line)
    private helperMethodX
    private helperMethodY
    private helperMethodZ
}

Каждый метод имеет не более 15 строк. Общая длина этого класса ~300 строк. Как вы думаете, это объект Бога или какой-то другой класс с плохим запахом? Это какой-то анти-паттерн? Если вы думаете, что это должно быть переработано - пожалуйста, скажите мне, как.

1 ответ

Я бы не назвал это классом бога, но я бы назвал это нарушением принципа открытого-закрытого типа.

Я вижу проблему в том, что этот валидатор не масштабируется. Имея всего полдюжины критериев, его размер является разумным; но чтобы добавить Критерии в будущем, вы должны увеличивать этот класс каждый раз. Кроме того, этот валидатор не может изменить свою логику во время выполнения, например, чтобы пропустить или изменить порядок своих критериев.

Критерии могут быть разделены на отдельные классы стратегии для решения всех этих проблем.

Другие вопросы по тегам