我有一个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行。 你认为这是一个上帝的对象还是其他一些难闻的类? 它是某种反模式吗?如果您认为需要重新设计 - 请告诉我如何。
答案 0 :(得分:2)
我不会称之为神级,但我称之为违反open-closed principle。
我看到的一个问题是这个Validator没有缩放。只有六个标准,它的大小是合理的;但是要在将来添加Criteria,您必须每次都增加此类。此外,此Validator无法在运行时更改其逻辑,例如跳过或重新排序其条件。
标准可以分为单个strategy类来解决所有这些问题。