通过几个简单标准验证的Validator类 - 这个上帝对象?

时间:2015-08-11 18:03:20

标签: java design-patterns god-object

我有一个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 个答案:

答案 0 :(得分:2)

我不会称之为神级,但我称之为违反open-closed principle

我看到的一个问题是这个Validator没有缩放。只有六个标准,它的大小是合理的;但是要在将来添加Criteria,您必须每次都增加此类。此外,此Validator无法在运行时更改其逻辑,例如跳过或重新排序其条件。

标准可以分为单个strategy类来解决所有这些问题。