【问题标题】:hibernate / spring validation in service layer服务层中的休眠/弹簧验证
【发布时间】:2010-11-25 11:37:16
【问题描述】:

---添加(编辑)--

是否应该在服务层进行验证,即使您在前端进行验证?

例如,struts 具有验证功能,因此您可以对其进行大量验证。 (我不是指 Java 脚本验证。)

--

您是否在服务层中使用休眠验证器或弹簧验证,即使您已经在前端进行了验证?

(前端验证不必是hibernate或spring one)

【问题讨论】:

  • 对不起,我没有正确地询问。

标签: java design-patterns architecture


【解决方案1】:

一致的数据是企业应用程序中最重要的事情之一!

所以是的:您需要检查两次:在前端和服务层。

在我们的 Web 应用程序中,我们在不同级别有不同的检查: (我不是在谈论不一致的检查,我是在谈论检查的粒度和范围。)

  1. 输入字段的 Java 脚本检查(最大长度,非空...)
  2. 与 (1) 相同的检查以及服务器端 Web 控制器中的一些更复杂的检查
  3. 在实体和服务中检查会破坏应用程序逻辑的重要(有时是复杂的)约束
  4. 数据库可以轻松检查的所有内容(非空、外键、唯一)都由数据库约束检查。

IHO 最好到处检查,但这是不可能的。所以你需要一个一致的政策来检查什么。此政策很大程度上取决于您正在开发的应用程序类型。

【讨论】:

    【解决方案2】:

    我们将它与 wicket 结合使用作为前端框架。您必须考虑需要分两步进行验证:

    1. 验证输入,例如:是否为整数
    2. 根据业务逻辑进行验证

    我们使用业务验证在检票口内进行验证解决了这个问题。所以你不必写两次代码。

    【讨论】:

      【解决方案3】:

      您的问题不够具体,即它看起来不能解决单个问题(更像是一项民意调查)。

      要回答更具体的问题“即使您在前端进行验证,您是否应该在服务层进行验证?”,答案是肯定的。几乎所有的前端验证,尤其是对于 web 应用程序,都可以绕过。您的服务应实施适当的验证以确保它们是一致的,并且不应依赖用户空间中的验证(如 Javascript 检查),因为它们很容易被击败。

      更新:当决定在代码的前端(调度程序/控制器)和服务层之间进行验证时,我想说没有硬性规定。我可能会在前端检查我们收到的输入是否合理,并在服务层进行域级验证。

      【讨论】:

        【解决方案4】:

        我强烈建议使用 Hibernate Validator 并将所有验证保存到模型中。它对 Oops 封装起到了很好的推动作用,因为模型现在可以自我验证。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-04
          • 2020-03-13
          • 1970-01-01
          • 2011-08-09
          • 2012-01-22
          • 2015-12-14
          • 1970-01-01
          • 2012-07-04
          相关资源
          最近更新 更多