我正在编写一个用于验证某些特定对象的库。 我像策略模式一样实现它。
实施验证库的最佳模式是什么?
我的一些代码如下所示。
//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");
答案 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
几点: