Model view controller MVC-在哪里实现表单验证(服务器端)?

Model view controller MVC-在哪里实现表单验证(服务器端)?,model-view-controller,validation,forms,Model View Controller,Validation,Forms,在编码传统的MVC应用程序时,编码服务器端表单验证的最佳实践是什么?代码属于控制器还是模型层?为什么呢?来自维基百科: (MVC)是软件工程中使用的一种体系结构模式。模式的成功使用将业务逻辑与用户界面考虑因素隔离开来,从而使应用程序更容易修改应用程序的可视外观或底层业务规则,而不会影响其他应用程序。在MVC中,模型表示应用程序的信息(数据)和用于操作数据的业务规则;视图对应于用户界面的元素,如文本、复选框项等;控制器管理与用户动作模型(如击键和鼠标移动)通信的细节 因此,model-it包含应用

在编码传统的MVC应用程序时,编码服务器端表单验证的最佳实践是什么?代码属于控制器还是模型层?为什么呢?

来自维基百科:

(MVC)是软件工程中使用的一种体系结构模式。模式的成功使用将业务逻辑与用户界面考虑因素隔离开来,从而使应用程序更容易修改应用程序的可视外观或底层业务规则,而不会影响其他应用程序。在MVC中,模型表示应用程序的信息(数据)和用于操作数据的业务规则;视图对应于用户界面的元素,如文本、复选框项等;控制器管理与用户动作模型(如击键和鼠标移动)通信的细节


因此,model-it包含应用程序和业务规则。

我完全同意Josh的观点。然而,您可以在控制器和模型之间创建一种验证层,以便在数据到达模型之前对其执行大多数语法验证

比如说,

验证层将验证日期格式、金额格式、必填字段等


因此,该模型将纯粹专注于业务验证,比如x数量应该大于y数量。

到目前为止,我在MVC方面的经验完全由rails组成

Rails在模型中进行100%的验证。
在大多数情况下,这是非常有效的。我会说10次中有9次这是你所需要的

但是,在某些方面,您从表单提交的内容与您的模型不匹配。可能会有一些额外的过滤/重新排列等

我发现解决这些问题的最佳方法是创建人造模型对象,它基本上与模型对象类似,但与表单数据一一对应。这些人造模型对象实际上并没有保存任何东西,它们只是附加了验证的数据存储桶。
(在rails中)这样的一个例子是


一旦数据进入这些模型(并且是有效的),将其直接传输到实际模型通常是一个非常简单的步骤。

在转换模型的用户输入时,基本语法检查应该在控件中。模型需要进行实际数据验证