gpt4 book ai didi

validation - 在哪里实现跨实体验证?

转载 作者:行者123 更新时间:2023-12-02 04:01:38 24 4
gpt4 key购买 nike

我有一个项目,其中数据模型和业务层位于两个不同的模块中。当然,业务模块依赖于模型模块。实体验证是通过 java-validation-api 注解实现的。

我想知道我应该在哪里实现跨实体验证(业务验证,验证不同实体类型之间的关系)。目前我看到以下选项:

  • 创建自定义 javax.validation.ConstraintValidators 和相关的注解。问题是,验证器需要访问业务服务,即检索相关实体,但模型模块不应该依赖于业务模块。
  • 在业务服务持久化/合并方法中实现跨实体验证(即通过使用拦截器)。这是可能的,但跨实体验证与实体验证是分开的,我希望只有一个地方进行验证。

  • 哪个选项更可取?有没有更好的建议?

    谢谢,
    塞巴斯蒂安

    最佳答案

    从思想上看做法1.比较好。 Bean Validation 在 Model 级别(在 Model-View-Controller 中)工作,如果 Model 部分与数据库对话,这没有错。因此,例如,您可以创建 DAO,服务领导者和模型验证器都可以使用它,以避免代码重复。

    拦截器也是验证某些东西的好地方,但是您将无法使用 Bean Validation 的全部功能和自动性。可能您需要手动调用模型对象上的 validate 方法,在需要的地方抛出 ConstraintViolationException 等。可行,但需要做一些工作。此外,模型中可能会留下一些验证,因此,正如您所指出的,将有不止一个地方进行验证。

    所以我会将必要的数据库代码移动到单独的层并使用选项 1。

    关于validation - 在哪里实现跨实体验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10278859/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com