java - 我应该在我的 MVC 层和服务层中重复验证吗?

标签 java spring validation stripes

此刻我感到有些矛盾。我有一个 Web 应用程序,使用 Stripes 作为 MVC 框架,使用 Spring/Hibernate 作为后端。我的 MVC 层中有一个帐户注册方法,需要进行以下验证:

  • 用户名尚未被使用
  • 提供的电子邮件地址尚未与其他帐户相关联

我在 Stripes(MVC 层)中有一个验证方法可以检查这两种情况,但想知道我的服务层是否应该重复这些检查?如果服务层接口(interface)作为 Web 服务公开,那么我认为验证是个好主意,但如果仅在 Web 应用程序的上下文中使用,是否需要验证?

编辑:我不打算复制验证代码 - 我的意思是在两个地方复制验证方法调用。

我认为我的选择是:

  1. 在 MVC 和服务层复制验证调用
  2. 仅在 MVC 层执行此验证
  3. 仅在服务层执行此验证。

此处的最佳做法是什么?我正在寻找有关我应该选择哪个选项以及原因的建议/意见。

请注意,注册表单的输入字段有简单的验证检查(如检查空白),我认为这些应该仅由 MVC 验证处理;我只关心更复杂的验证。

最佳答案

不要重复代码。使用 JSR303 Bean Validation因此您可以在应用的所有层中使用相同的验证逻辑。

Hibernate Validator (一个独立于 Hibernate ORM 东西的项目)提供了这个接口(interface)的引用实现。它使用起来非常简单,你可以get started with it very quickly .

关于java - 我应该在我的 MVC 层和服务层中重复验证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3141253/

相关文章:

java - 将十进制转换为二进制以及二进制转换为十进制时的 substr、整数和循环问题

java - lub(T1,... Tn) 是什么意思?

java - 获取 SpringJUnit4ClassRunner 中所有类型的 Bean

java - org.apache.commons.lang.SerializationException : java. lang.ClassNotFoundException 异常

jQuery 验证 : Not default value

java - 是否有任何类似 Python 的 Java 交互式控制台?

java - Java 中类型安全的 map-reduce

java - 如何从 ValueStack 中删除操作?

javascript - 验证棘手的字段

javascript - 引导验证在表单提交时不起作用