我正在为某些对象(这些对象的字段)设计一个 validator 。这些对象包含在一个更大的对象 - 容器中。
示例:汽车作为容器。由车轮、发动机、车身组成。 比方说我需要验证车轮的直径是否正确、发动机的容量是否正确、车身是否有一定的长度等。
理论上我认为我应该在 build 容器(汽车)之前验证所有内容。
实现此目标的最佳方法是什么?我是否使用 validate() 方法创建一个抽象 validator 类并在每个封闭类中实现它?容器呢,我是否根本不将其包含在验证过程中?感谢您的帮助。
最佳答案
我建议您不要将验证逻辑放在您要验证的类中。
我发现最好将这些类保留为纯粹的值对象,并创建一个平行的 validator 层次结构,大致一个用于每个要验证的实体。或者,您也可以创建一个可以验证所有实体的 validator :但是,此解决方案的可扩展性较差,可能会使您违反 open-closed principle当您必须添加新实体时(例如,您还想处理汽车的后视镜)。
假设您选择一个实体:一个 validator
方法,容器的 validator 将首先验证容器内的组件,然后验证它们是否适合。
请同时考虑使用 validator 框架的可能性,例如 Apache Commons Validator ,这可以使您免于编写样板代码。但是,由于我不知道你要执行什么样的复杂验证,我不知道它是否符合你的需求。
此外,我认为您不必担心在构建之前验证所有内容。只需构造它并在之后进行验证:然后,如果它违反了验证规则,您可以将其丢弃(即不要在任何地方保留它)。
关于Java - 设计 validator 、类层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14318045/