Best practices für die Validierung je nach Aktionen, Spring MVC

Ich versuche, um die Validierung mit Spring-Validierung. Ich Frage mich, was ist die beste Vorgehensweise, um die Validierung, dass kommt vor allem auf die Aktionen des Anwenders, im folgenden habe ich drei verschiedene Ansätze, aber ich weiß nicht welche am besten ist.

Angenommen, wir haben folgende Klasse Foo zu validieren und viele andere Regeln der validation je nach Aktion durch den Benutzer.

public class Foo {
    private String name;

    private int age;

    private String description;

    private int evaluation;

    //getters, setters
}

Was ist der beste Weg, durchführen diese Validierungen (zum Beispiel: während der Erstellung nur name und Alter erforderlich sind, während der Bewertung einer Maßnahme, brauche ich nur die Bewertung validiert werden und so weiter)

Lösung 1: eine validator-Klasse pro Gültigkeitsregel

public class CreateFooValidator implements Validator {
    //validation for action create
}
public class EvaluateFooValidator implements Validator {
    //validation for evaluate action
}

Lösung 2: eine validator-Klasse mit mehreren Methoden

public class FooValidator implements Validator {
    @Override
    public boolean supports(Class<?> clazz) {
        return Foo.class.equals(clazz);
    }

    //the default validate method will be used to validate during create action

    @Override
    public void validate(Object target, Errors errors) {
    //validation required
    }

    //method to validate evaluate action
    public void validateFooEvaluation(Object target, Errors errors) {
    //validation required
    }
    //other validation methods for other actions
}

Lösung 3: Zusätzliche Eigenschaft Aktion in der Klasse Foo, eine Prüfung

public class Foo {

    private String name;

    private int age;

    private String description;

    private int evaluation;

    private String actionOnFoo;

    //getters, setters
}

public class FooValidator implements Validator {

    private final Foo foo = (Foo) target;
    @Override
    public boolean supports(Class<?> clazz) {
        return Foo.class.equals(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        //test which action is performed by user
        if ("create".equals(foo.getActionOnFoo())) {
            //call for private method that performs validation for create action
        }
    }
    //all private methods
}

Was ist die beste Lösung unter den 3 oder andere Lösung, wenn überhaupt?
Danke!

InformationsquelleAutor aslan | 2013-09-30
Schreibe einen Kommentar