1

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 行です。神のオブジェクトか、それとも他の悪臭を放つクラスだと思いますか? それはある種のアンチパターンですか?再設計が必要だと思われる場合は、その方法を教えてください。

4

1 に答える 1

3

神クラスとまでは言わないが、開閉主義違反だ。

私が見る問題は、この Validator がスケーリングしないことです。基準は半ダースしかないため、そのサイズは妥当です。ただし、将来基準を追加するには、毎回このクラスを増やす必要があります。さらに、この Validator は実行時にロジックを変更することはできません。たとえば、条件をスキップしたり並べ替えたりすることはできません。

これらの問題をすべて解決するために、基準を個々の戦略クラスに分離することができます。

于 2015-08-11T18:27:55.843 に答える