验证:模型或ViewModel

Mat*_*ves 24 validation asp.net-mvc mvvm asp.net-mvc-2

在模型或ViewModel上使用带有MVC(MVVM)的ViewModel时,验证应该驻留在哪里?(或两者兼而有之)?为什么?我特别考虑到ASP.NET MVC的V2即将推出,我提出这个问题.

复杂/自定义验证怎么样?

mkc*_*ler 19

任何特定于业务的验证都应该在模型中.任何特定于网站的验证都可以在Model和/或ViewModel中完成.这样,您的业务逻辑(模型)就可以移动到不同的界面(Windows,Web窗体等)之后,您的验证将保持不变.


Dmy*_*iak 11

我会说经常需要在所有级别进行验证:)

我想了一会儿:

  1. 用户输入验证:绝对在控制器上,而不是在任何类型的模型上.示例:Captcha.
  2. 查看在ViewModel上验证的相关数据(不是在ViewModel中,而是在ViewModel上).示例:密码确认,必填电子邮件.
  3. 业务规则验证肯定会进入模型验证.示例:必填电子邮件,折扣优惠券应有效.
  4. 潜在的用例(故事,场景等)验证.它不验证属性,但验证整个过程的正确性.应该进行模型验证(或者在单独的图层中更好).示例:如果在给定时间段内没有下订单,则一周内只能免费获得3个项目.

注意:我将所需的电子邮件包含在2和3中,因为它通常取决于它所属的位置.
如果电子邮件仅播放信息角色 - 则可以放宽验证并将其推送到视图模型.如果电子邮件是对应用程序的强烈要求 - 它肯定是模型验证.

第四件事实际上与我们理解的验证无关.
但它也应该适用.因此,应将结果显示给用户.

基本上所有4种类型的验证都可以使用相同的基础架构.但实施取决于:))

干杯,
德米特里.


Kel*_*sey 5

模型.您的验证应该在您的业务层中.您的视图模型应该只是用于设置视图.