1

我有一个 Java 类验证器。它验证一些文件。这是伪代码:

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 行。你认为它是上帝的对象还是其他一些难闻的类?它是某种反模式吗?如果您认为需要重新设计 - 请告诉我如何。

4

1 回答 1

3

我不会称其为神级,但我会称其为违反开闭原则

我看到的一个问题是这个验证器不能扩展。只有六个 Criteria,它的大小是合理的;但是以后要加Criteria,每次都要增加这个类。此外,此 Validator 无法在运行时更改其逻辑,例如跳过或重新排序其 Criteria。

可以将标准分成单独的策略类来解决所有这些问题。

于 2015-08-11T18:27:55.843 回答