用于验证用户输入的 OOP 设计

Nik*_*las 5 java oop coding-style

目前,我尝试着考虑 OO 原则来设计一些东西。因此,假设在处理用户输入之前,我需要对其进行验证。根据 OO,单独的 Validator 类将是正确的方法。这将如下所示:

    public class Validator{
      public void validate(String input) throws ValidationException{
        if (input.equals("")) throw new ValidationException("Input was empty");
      }
    }
Run Code Online (Sandbox Code Playgroud)

然后,我之前通过依赖注入获得验证器对象的处理类将调用 validator.validate(input)

这个设计的一个好处是,

  1. 我的处理类可以通过 DI 获得验证器的模拟,这使测试更容易
  2. Validator 类可以独立测试

但是,我怀疑验证器的设计。根据 OO,它错过了某种状态。通过这种设计,它就像 util 类,而验证方法可以是static. 我读了很多次(静态)Util 类是糟糕的 OO 设计。那么,如何在保持我提到的两个优势的同时,通过更多的 OO 来做到这一点呢?

PS.: 也许,OO 只是解决这类问题的糟糕方法。但是,我想看看 OO 解决方案的样子并形成我自己的意见。

Mau*_*rry 1

您的示例中的验证器没有状态(并且不需要任何状态),但另一个验证器可能需要一个状态(例如使用格式):

例子:

public class RegExValidator {
    private Pattern pattern;

    public RegExValidator(String re) {
        pattern = Pattern.compile(re);
    }

    public void validate(String input) throws ValidationException {
        if (!pattern.matcher(input).matches()) {
            throw new ValidationException("Invalid syntax [" + input + "]");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)