gpt4 book ai didi

javascript - 您应该在哪里验证/清理数据?

转载 作者:搜寻专家 更新时间:2023-10-31 23:42:24 24 4
gpt4 key购买 nike

我正在构建一个传统的 MVC 应用程序。我有一个/lib 文件夹,它定义了处理数据库操作和处理外部 API 的函数。处理用户输入时,我应该在哪里验证数据?我应该在路由 Controller 中验证它,然后将验证过的数据发送到数据库函数吗?或者我应该不在路由 Controller 中进行验证,而让/lib 文件夹中的函数进行所有验证?

最佳答案

对我来说最自然的地方是模型,因为它包含数据。 GRASP 专家原则指出,您应该将职责分配给具有履行职责所需信息的对象。

我们可能会争辩说, Controller 可能拥有进行验证所需的所有信息(数据),但对我来说, Controller 应该很轻。此外,我认为“所有信息”不仅意味着拥有必须验证的数据,还意味着了解其格式,这是模型所关心的。 Controller 可能知道某个模型需要的数据应该如何,但是该模型也可以在该 Controller 范围之外使用,因此它不应该依赖于 Controller 的验证才能正常工作,因为该模型(几乎)是您最后一次机会检测无效数据(您可以而且必须在数据库上执行此操作,但数据在进入数据库之前应该经过验证和清理,尽管通常数据库模式与您应该在模型中执行的验证之间存在直接匹配) .

每次您对模型进行 CRUD 操作时,您可能需要验证数据,并且您将确保您的数据几乎总是正确的。此外, Controller 还可以更改随后进入该模型的数据,因此即使 Controller 先前对其进行了验证,它也可能会产生无效数据。

但是,请考虑一下。 Controller 可能会更改数据,事实上他们经常这样做。在表单和模型中的字段之间总是有一个直接映射是不寻常的,有时您会有与任何模型无关或几乎没有关系的输入,因此您应该在模型之外验证它们。例如,考虑“重复密码”字段。跟型号没关系!只有“密码”字段应该到达它。

其他人会说他们更喜欢anemic models在某些情况下,这可能比丰富的模型更适合,但它们也有一些缺点,一般来说,丰富的模型最适合。

你还应该考虑在客户端(即JS)进行验证,这样你就可以给他一个关于他在做什么的快速反馈,而不是将数据发送到服务器进行验证,然后等待响应甚至加载又是整个页面!

这样做的一个好方法是使用正则表达式,因为您将在所使用的不同语言之间使用相似的表达式,尽管通常情况下这还不够。或者更好的是,你可以在任何地方使用 JS 和 Node.js 而完全忘记这个问题。

这可能不是您要找的答案,但进行验证的正确方法不止一种,因为每个应用程序的方法都不相同。大多数时候,验证应该发生在不同的地方,在应用程序的一些不同层进行相同的验证,而在其他一些层之间进行不同的验证。

在 StackOverflow 上有更多关于此主题的问题,因此您可以查看他们与其他人的不同意见:

关于javascript - 您应该在哪里验证/清理数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906870/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com