9

在我之前的问题中,大多数评论者都同意在客户端和服务器端都有验证逻辑是一件好事。

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

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

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

我有兴趣听听你的意见。
你有某种标准流程来处理这个问题吗?或者,也许您认为这根本不是问题?:)

编辑

伙计们,首先感谢您的回答。

明天我会总结你的答案并更新问题的文本,就像在这种情况下一样

4

4 回答 4

4

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

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

于 2008-09-02T14:24:33.540 回答
2

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

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

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

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

  1. 验证应尽可能靠近数据输入点和提交点。
  2. 无论何时发生验证,都应使用相同的验证规则——如果客户端验证通过,那么以后的验证永远不会失败(预保存业务规则、外键违规等)
于 2008-09-02T14:38:46.893 回答
2

Some framework provides a validation support the may keep your client and server validation in sync. Take a look at this Seam validation tutorial using annotations. It's a good implementation and very easy to understand.

Anyway, if you don't wan't to rely on frameworks, I think it is easy to implement something similar.

于 2008-09-02T14:48:55.417 回答
1

If you're using ASP.Net there are a number of validation controls you can use. These controls are written in a very generic way, such that most of them automatically duplicate your validation logic between the client and server, even though you only set options for the control in one place.

You are also free to inherit from them to create additional domain specific validators, and there are third-party control packs on the web you can get that add to the base controls.

Even if you're not using ASP.Net it's worth taking a look at how this is done. It will give you ideas for how to do something similar in your own platform.

于 2008-09-02T14:51:23.430 回答