在对传统MVC应用程序进行编码时,对服务器端表单验证进行编码的最佳实践是什么?代码是属于控制器层还是模型层?为什么?
我完全同意乔希。但是,您可以在Controller和Model之间创建一种验证层,以便可以在数据到达模型之前对数据执行大多数语法验证。
例如,
验证层将验证日期格式,金额格式,必填字段等...
因此该模型将仅专注于业务验证,例如x数量应大于y数量。
来自维基百科:
Model-view-controller (MVC) is an architectural pattern used in software engineering. Successful use of the pattern isolates business logic from user interface considerations, resulting in an application where it is easier to modify either the visual appearance of the application or the underlying business rules without affecting the other. In MVC, the model represents the information (the data) of the application and the business rules used to manipulate the data; the view corresponds to elements of the user interface such as text, checkbox items, and so forth; and the controller manages details involving the communication to the model of user actions such as keystrokes and mouse movements.
因此,模型-它包含应用程序和业务规则。
基本语法检查应在控件中,因为它会转换模型的用户输入。该模型需要进行实际数据验证。
到目前为止,我在MVC方面的经验完全来自于安全。
Rails在模型中进行100%的验证。
在大多数情况下,这非常有效。我要说的是10倍的9倍。
在某些区域中,您从表单提交的内容与模型不正确匹配。可能会有一些其他的过滤/重新排列等。
解决这些问题的最佳方法是创建人造模型对象,该对象基本上像模型对象一样工作,但与表单数据进行一对一映射。这些伪模型对象实际上不保存任何内容,它们只是附带验证的数据的存储桶。
ActiveForm
就是这样的一个例子(在Rails上)
一旦数据进入这些数据(并且是有效的),通常这是一个非常简单的步骤,即可直接将其传输到您的实际模型中。