验证:模型或ViewModel

时间:2009-08-10 01:37:58

标签: asp.net-mvc validation mvvm asp.net-mvc-2

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

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

3 个答案:

答案 0 :(得分:19)

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

答案 1 :(得分:11)

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

我想了一会儿:

  1. 用户输入验证:绝对在控制器上,而不是在任何类型的模型上。示例: Captcha
  2. 查看在ViewModel上验证的相关数据(不是在ViewModel中,而是在ViewModel上)。示例:密码确认必需的电子邮件
  3. 业务规则验证肯定会进入模型验证。示例:必填电子邮件优惠券应有效
  4. 潜在的用例(故事,场景等)验证。它不验证属性,但验证整个过程的正确性。应该进行模型验证(或者在单独的图层中更好)。示例:如果没有订单,一周内只能免费获得3件商品 在特定时期内投入
  5. 注意:我将必需的电子邮件包含在2和3中,因为它通常取决于它所属的位置。
    如果电子邮件仅播放信息角色 - 则可以放宽验证并将其推送到视图模型。如果电子邮件是对应用程序的强烈要求 - 它肯定是模型验证。

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

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

    干杯,
    德米特里。

答案 2 :(得分:5)

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