代码之家  ›  专栏  ›  技术社区  ›  aku

使服务器端和客户端之间的验证逻辑保持同步[关闭]

  •  4
  • aku  · 技术社区  · 16 年前

    在我的 previous question 大多数评论者都认为在客户端和服务器端都有验证逻辑是一件好事。

    但是有一个问题-您需要在数据库和客户端代码之间保持验证规则的同步。

    所以问题是我们该如何处理?

    一种方法是使用orm技术,现代orm工具可以生成代码,在将数据发送到服务器之前处理数据验证。

    我有兴趣听听你的意见。
    你有处理这个问题的标准程序吗?或者你认为这根本不是问题?:)

    编辑 :

    伙计们,首先谢谢你们的回答。

    明天我将总结你的答案并更新问题的文本,如 this case

    4 回复  |  直到 16 年前
        1
  •  3
  •   Eric Z Beard    16 年前

    正如在另一篇文章的一个答案中提到的,如果要保持层的分离,没有好的方法可以避免在每个层中重复验证逻辑。如果你使用一些东西来自动地将它们连接在一起,那么你已经在层之间引入了一种耦合,这种耦合可能会阻碍你前进。这可能是其中一种情况,您只需手动跟踪事情。

    不管怎么做,都必须确保每个层都在进行自己的验证,因为您永远不知道如何访问该层。无法保证您实现的所有层始终保持在一起。

        2
  •  1
  •   user2870    16 年前

    我喜欢使用验证服务,它不一定关心要验证的数据的来源。当您谈到将验证规则传输到客户端(即web页面)时,这可以以几种不同的方式工作,但我觉得这最重要的方面是对实际的验证规则拥有单一的权限。

    例如,如果您的数据核心实体上有验证逻辑,比如通过验证方法检查的validationrule对象集合(这是一个非常典型的场景),那么我将通过转换将这些相同的规则提升到客户端(javascript)。

    在asp.net世界(我唯一能和之交谈的)有两种方法可以做到这一点。我的首选方法是创建自定义验证器,将ui小部件绑定到实体上的字段(及其所有验证规则)。这样做的好处是,您的所有验证逻辑都可以绑定到单个验证程序中。缺点是验证消息将变得密集,因为验证规则都是一次测试的。当然,这可以通过让您的验证逻辑只返回第一个失败的消息来缓解,等等。

    这个答案可能听起来有些模糊和不具体,但我想说的两点是:

    1. 验证应尽可能靠近输入数据和提交数据的位置。
    2. 无论验证发生在何处,都应使用相同的验证规则-如果客户端验证通过,则以后验证决不能失败(预保存业务规则、外键冲突等)。
        3
  •  1
  •   Marcio Aguiar    16 年前

    某些框架提供了验证支持,可以使客户端和服务器验证保持同步。看看这个 Seam validation tutorial 使用注释。这是一个很好的实现,而且很容易理解。

    无论如何,如果你不想依赖框架,我认为实现类似的东西是很容易的。

        4
  •  0
  •   Joel Coehoorn    16 年前

    如果您使用的是ASP.NET,则可以使用许多验证控件。这些控件是以非常通用的方式编写的,因此大多数控件都会自动在客户端和服务器之间复制验证逻辑,即使您只在一个位置设置控件的选项。

    您还可以从它们继承来创建其他特定于域的验证器,并且在web上有第三方控件包,您可以将其添加到基本控件中。

    即使你不使用asp.net,也值得看看这是如何做到的。它将为您提供如何在自己的平台上做类似事情的想法。