0

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

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

我的一些代码如下所示。

     //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");
4

2 回答 2

1

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

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

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

于 2013-07-18T11:28:45.777 回答
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 :)
于 2016-07-27T16:52:54.297 回答