Les meilleures pratiques pour la validation en fonction des actions de Spring MVC

Je suis en train d'effectuer une validation à l'aide de Printemps de validation. Je me demande quelle est la meilleure pratique pour effectuer la validation qui dépend principalement de l'action de l'utilisateur, ci-après, j'ai trois approches différentes mais je ne sais pas lequel est le meilleur.

Assumer, nous avons les éléments suivants de la classe Foo afin de valider et de nombreuses règles de validation en fonction de l'action effectuée par l'utilisateur.

public class Foo {
    private String name;

    private int age;

    private String description;

    private int evaluation;

    //getters, setters
}

Quel est le meilleur moyen pour effectuer ces validations (par exemple: lors de la création seul nom et l'âge sont nécessaires, au cours d'évaluer l'action, j'ai seulement besoin d'évaluation pour être validé et ainsi de suite)

solution 1: une classe de validation pour la validation de la règle

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

solution 2: une classe de validation avec plusieurs méthodes

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
}

solution 3: propriété Supplémentaire d'action dans la classe Foo, un validateur

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
}

Quelle est la meilleure solution parmi les 3 ou une autre solution si tout?
Merci!

InformationsquelleAutor aslan | 2013-09-30