Database 保持服务器端和客户端之间的验证逻辑同步

Database 保持服务器端和客户端之间的验证逻辑同步,database,architecture,Database,Architecture,在我的文章中,大多数评论都认为在客户端和服务器端都有验证逻辑是一件好事 但是有一个问题-您需要在数据库和客户端代码之间保持验证规则的同步 所以问题是我们如何处理它 一种方法是使用ORM技术,现代ORM工具可以生成代码,在将数据发送到服务器之前负责数据验证 我很想听听你的意见。 您是否有某种标准流程来处理此问题?或者你认为这根本不是问题 编辑: 伙计们,首先谢谢你们的回答 明天我将总结您的答案并更新问题的文本,如另一篇文章的答案之一所述,如果您要保持层次分离,没有好的方法可以避免在每个层次中重复验

在我的文章中,大多数评论都认为在客户端和服务器端都有验证逻辑是一件好事

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

所以问题是我们如何处理它

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

我很想听听你的意见。
您是否有某种标准流程来处理此问题?或者你认为这根本不是问题

编辑

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


明天我将总结您的答案并更新问题的文本,如另一篇文章的答案之一所述,如果您要保持层次分离,没有好的方法可以避免在每个层次中重复验证逻辑。如果您使用某种东西自动将它们连接在一起,则在层之间引入了某种耦合,这可能会阻碍您前进。这可能是其中一种情况,您只需手动跟踪事情


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

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

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

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

这个答案听起来可能有点模糊和不具体,但我想提出两点:

  • 验证应尽可能靠近数据输入点和提交点进行
  • 无论在何处进行验证,都应使用相同的验证规则-如果客户端验证通过,则以后它永远不会失败(预保存业务规则、外键冲突等)

  • 某些框架提供了验证支持,可以使客户端和服务器验证保持同步。请使用注释查看这一点。这是一个很好的实现,非常容易理解


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

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

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

    即使您没有使用ASP.Net,也值得一看这是如何实现的。它将为您提供如何在自己的平台上执行类似操作的想法