【问题标题】:Validator class that validates by several simple criterias - is this God-object?通过几个简单标准验证的验证器类 - 这是上帝对象吗?
【发布时间】:2015-08-11 18:03:19
【问题描述】:

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

【问题讨论】:

标签: java design-patterns god-object


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2018-08-21
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多