Java - 设计验证器、类层次结构

Rai*_*ter 9 java validation inheritance class-hierarchy

我正在努力为某些对象(这些对象的字段)设计一个验证器。这些物体被封装在一个更大的物体——容器中。

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

理论上,我认为我应该在建造容器(汽车)之前验证一切。

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

gd1*_*gd1 4

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

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

假设您选择该one entity : one validator方法,容器的验证器将首先验证容器内的组件,然后验证它们是否组合在一起。

另请考虑使用验证器框架(例如Apache Commons Validator )的可能性,它可以使您免于编写样板代码。但是,由于我不知道您必须执行什么样的复杂验证,因此我不知道它是否符合您的需求。

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