【发布时间】:2018-01-09 11:48:59
【问题描述】:
目前,我尝试在设计一些东西时考虑到面向对象的原则。因此,假设在处理用户输入之前,我需要对其进行验证。根据 OO,单独的 Validator 类将是正确的方法。如下所示:
public class Validator{
public void validate(String input) throws ValidationException{
if (input.equals("")) throw new ValidationException("Input was empty");
}
}
然后,我的处理类(之前通过依赖注入获取验证器对象)将调用validator.validate(input)
这个设计的一个优点是,
- 我的处理类可以通过 DI 获得验证器的模拟,这使得测试更容易
- Validator 类可以独立测试
但是,我的疑虑在于验证器的设计。根据OO,它错过了某种状态。通过这种设计,它是 util 类,验证方法可以是static。而且我读了很多次(静态)Util 类是糟糕的 OO 设计。那么,如何在保持我提到的两个优势的同时,通过更多的 OO 来做到这一点呢?
PS.:也许,OO 对这类问题只是一个糟糕的解决方案。不过,我想看看 OO 解决方案的样子并形成我自己的看法。
【问题讨论】:
-
我认为最好将所有验证错误写入集合并返回。然后您可以根据需要处理错误(异常、正确的 html 页面、json 响应等)。假设用户必须填写一些包含 10 个字段的表单 - 您的设计将在第一个字段上抛出异常,并且不告诉任何其他 9 个字段。所以你的验证器的目的只是检查数据和返回结果,其他类会写一个响应。
-
你说得对,我以前没有想过这个。
标签: java oop coding-style