gpt4 book ai didi

php - 你应该在模型中验证吗? (基于 Symfony 的问题,但与一般 MVC 相关)

转载 作者:可可西里 更新时间:2023-11-01 13:17:04 26 4
gpt4 key购买 nike

这是一个与 Symfony 相关的快速问题,但可能是一个一般的 MVC 问题。

我的模型中有一个类,例如 WebUser。此类具有 email_address 属性。此值对于每个 WebUser 必须是唯一的。

现在,我已经做到了,所以我所有的 Symfony 表单都会验证 email_address 对于给定的 WebUser 是唯一的,但是我想知道是否应该添加这个也对模型进行验证?

但这也让我开始思考,您是否应该真正验证模型中的每个 set() 方法?确保没有错误数据最终出现在数据库中似乎是一个明智的决定,但是大多数(如果不是全部)数据必须通过 Controller , Controller 也会进行验证。所以对我来说,似乎我运行了两次相同的验证,但似乎毫无意义?

您对此有何看法?我仍然倾向于在模型中进行验证,因为这最有意义,因为它决定了业务逻辑。

如果您应该在模型中进行验证,您如何在 Symfony 中抛出一个由表单框架正确处理的适当的 set() 错误?

谢谢。

最佳答案

我不同意“验证应该是领域逻辑的一部分,而不是前端逻辑”。

验证是应用程序的复杂功能部分,必须是上下文感知的。 IE。你必须知道用户是否登录,她有什么样的凭据,请求/表单的状态等等。相反,模型必须是上下文不可知的(在任何环境中工作,不仅是 http 请求,还有 cli 等)所以他们不知道用户、状态和 http 请求。这是对模型类的可测试性的强烈要求。

出于上述原因,功能验证必须属于知道应用程序状态(即 session )的表单。 symfony 对确实属于表单组件的 sfValidator* 类有很大帮助。这就是使用功能 测试来测试表单的原因。

数据验证应该在模型中进行(即检查值是整数还是字符串,检查它是否为空等)。这可以通过 Doctrine 模式内验证规则轻松实现。

关于php - 你应该在模型中验证吗? (基于 Symfony 的问题,但与一般 MVC 相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2132542/

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