Java - 设计 validator 、类层次结构

标签 java inheritance validation class-hierarchy

我正在为某些对象(这些对象的字段)设计一个 validator 。这些对象包含在一个更大的对象 - 容器中。

示例:汽车作为容器。由车轮、发动机、车身组成。 比方说我需要验证车轮的直径是否正确、发动机的容量是否正确、车身是否有一定的长度等。

理论上我认为我应该在 build 容器(汽车)之前验证所有内容。

实现此目标的最佳方法是什么?我是否使用 validate() 方法创建一个抽象 validator 类并在每个封闭类中实现它?容器呢,我是否根本不将其包含在验证过程中?感谢您的帮助。

最佳答案

我建议您不要将验证逻辑放在您要验证的类中。

我发现最好将这些类保留为纯粹的值对象,并创建一个平行的 validator 层次结构,大致一个用于每个要验证的实体。或者,您也可以创建一个可以验证所有实体的 validator :但是,此解决方案的可扩展性较差,可能会使您违反 open-closed principle当您必须添加新实体时(例如,您还想处理汽车的后视镜)。

假设您选择一个实体:一个 validator 方法,容器的 validator 将首先验证容器内的组件,然后验证它们是否适合。

请同时考虑使用 validator 框架的可能性,例如 Apache Commons Validator ,这可以使您免于编写样板代码。但是,由于我不知道你要执行什么样的复杂验证,我不知道它是否符合你的需求。

此外,我认为您不必担心在构建之前验证所有内容。只需构造它并在之后进行验证:然后,如果它违反了验证规则,您可以将其丢弃(即不要在任何地方保留它)。

关于Java - 设计 validator 、类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318045/

相关文章:

java - 像@depreciated这样的注释

java - 传递 Supplier<Stream<T>> 参数时 Stream.generate 方法的行为

validation - 如何为文件类型创建 PloneFormGen 验证器?

java - 在单击按钮的 android 上完成之前的 Activity

java - 如何声明 getParameterTypes() 返回类型的变量?

c++ - 当有其他虚拟基类时如何避免对基类函数的模糊调用

C++ : Function call Compile-Time Error from a Template Class using Typename as Base

java - 对象引用类型(动态绑定(bind))有问题吗?

javascript - 邮政编码输入可以在全局范围内验证吗?

c++ - cin 的十进制输入验证?