输入验证在哪里属于MVC应用程序?

the*_*row 23 language-agnostic model-view-controller controller model

我有一个MVC应用程序从表单接收输入.
这是一个登录表单,因此唯一需要的验证是检查输入是否为非空.
在我将它传递给模型之前,我在控制器中验证它.
这是最佳做法吗?它属于模型吗?

Kal*_*see 13

我认为没有官方的最佳实践限制验证MVC模式的任何单个部分.例如,您的视图可以(并且应该)使用Javascript进行一些前期验证.您的控制器还应提供相同类型的验证,以及更多与业务逻辑相关的验证.该模型还可以提供验证形式,即不允许空值的setter.

在joelonsoftware上有一个有趣的讨论.


小智 6

我一直在考虑这个问题,并且在尝试在控制器和模型中进行验证之后......最后我得出的结论是,对于我的许多应用程序来说......验证属于模型而不是控制器.为什么?因为相同的模型将来可以被各种其他控制器调用或API使用......然后我将不得不一遍又一遍地重复验证过程.这会违反DRY并导致许多错误.另外,哲学上它是与数据库(或其他持久性存储)交互的模型,因此无论如何都是"最后调用酒精"的地方.

所以我在控制器中进行get/post转换,然后将原始数据发送到模型进行验证和处理.当然我经常做php/mysql web应用程序,如果你正在做其他事情,结果可能会有所不同.我希望这可以帮助别人.