我有一个项目,其中数据模型和业务层位于两个不同的模块中。当然,业务模块依赖于模型模块。实体验证是通过java-validation-api注释实现的。
我想知道我应该在哪里实现跨实体验证(业务验证,其中验证了不同实体类型之间的关系)。目前我看到了以下选项:
哪个选项更可取?还有更好的建议吗?
谢谢, 塞巴斯蒂安
答案 0 :(得分:1)
从意识形态的角度来看,方法1.更好。 Bean验证工作在模型级别(在模型 - 视图 - 控制器中),如果模型部分与数据库进行对话,则没有错。因此,例如,您可以创建DAO,可以由服务租用者和模型验证器使用,以避免代码重复。
拦截器也是验证某些东西的好地方,但是你将无法使用Bean验证的全部功能和自动性。可能你需要手动调用模型对象的validate方法,在需要的地方抛出ConstraintViolationException等等。可行,但有点工作。此外,一些验证可能会保留在Model中,因此,正如您所指出的那样,将会有多个地方进行验证。
所以我会将必要的数据库代码移到单独的图层并使用选项1。