验证库设计模式选择

时间:2013-07-18 10:47:10

标签: java design-patterns validation

我正在编写一个用于验证某些特定对象的库。 我像策略模式一样实现它。

实施验证库的最佳模式是什么?

我的一些代码如下所示。

     //INTERFACE
     public interface IValidator {

            public  boolean validate(Object o) throws ValidationException;

        }


    //VALIDATOR OBJECT
    public class Validator {

        private IValidator validator;

        public Validator(IValidator validator)
        {
            this.validator=validator;
        }

        public boolean validate(Object o) throws ValidationException
        {
            return this.validator.validate(o);
        }

    }

    //EMAIL VALIDATOR 
    public class EmailValidator implements IValidator{

        @Override
        public boolean validate(Object o) throws ValidationException {

    //VALIDATE E MAIL HERE

            return false;
        }

    }


//TEST RUN
Validator validator = new Validator(new EmailValidator());
validator.validate("some email");

2 个答案:

答案 0 :(得分:1)

我想这个问题的答案主要是主观的,所以我只能提出自己的观点:

我自己也使用策略模式来完成这些任务,因为这就是它的意义所在。根据函数的输入,您可以使用特定的验证策略,因此我认为策略模式是正常的。

阅读有关战略模式Strategy Pattern的Wiki文章的第一部分。他们的主要例子也是验证。

答案 1 :(得分:1)

我会按如下方式增强您的代码:

//INTERFACE
public interface IValidator<T> {
       void validate(T arg) throws ValidationException;
}

//EMAIL VALIDATOR 
public class EmailValidator implements IValidator<Email email>{
    @Override
    public void validate(Email email) throws ValidationException {
        //VALIDATE E MAIL HERE, throw exception, if needed
    }
}

// Usage
EmailValidator validator = new EmailValidator();
validator.validate();     // Catch ValidatorException here to transform into business exception and appropriate error handling

几点:

  1. 这里的java Type Eraser可以帮助实现任何自定义实现的IValidator接口。
  2. 验证逻辑在POJO之外,POJO是纯POJO:)