用java设计通用验证工具

cgyqldqp  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(416)

任务是设计一个通用的验证工具。应该是的
能够验证n个不同类型的实体。
每个实体都有自己的一组验证约束。
每个实体可以由零个或多个其他实体组成
验证操作每次将验证n个或少于n个实体,每次验证将返回一个包含失败详细信息的验证结果(如果有),最终响应应该是所有验证的组合结果
验证的顺序可能不同。
实体类已存在,无法修改。
游客设计模式在这里是个不错的选择吗?我必须创建对应于每个实体的类,这些实体将与每个实体具有“has-a”关系,并且这个类使用accept方法实现一个接口。这是不是太复杂了?
我使用的是Java8,所以函数组合是一个很好的选择。另一种选择是为每个实体创建一个validate函数集合,然后动态组合并使用它们。这是正确的方向吗?你们还有别的选择可以给我指点吗?

w41d8nur

w41d8nur1#

访客模式可能有用,但我会让它简单一点。我看到的最佳方法是让所有实体实现一个类似于此的接口:

interface Entity {
    Collection<Constraint> getValidationConstraints();
    Collection<Entity> getInnerEntities();
}

每个实体将提供自己的约束和内部实体。在您的验证服务中,您只需一般地获取约束并基于它们应用验证逻辑。这将提高代码的可维护性。
如果无法更新实体类来实现该接口,则可以将其视为 Object 在您的验证服务和使用 instanceOf 识别他们(有点难看,但它是有效的)。

相关问题