Asp.net mvc 验证:模型或视图模型

Asp.net mvc 验证:模型或视图模型,asp.net-mvc,validation,mvvm,asp.net-mvc-2,Asp.net Mvc,Validation,Mvvm,Asp.net Mvc 2,在模型或ViewModel上使用带MVC(MVVM)的ViewModels时,验证应驻留在何处?(或者两者都有,或者两者都没有)?为什么?特别是考虑到ASP.NETMVC的V2即将面世,我提出了这个问题 那么复杂/自定义验证呢?任何特定于业务的验证都应该在模型中。任何特定于网站的验证都可以在模型和/或ViewModel中完成。通过这种方式,您的业务逻辑(模型)可以移动到不同的界面(Windows、Web表单等)之后,您的验证将保持不变。模型。您的验证应该在您的业务层中。您的视图模型应该只用于获取

在模型或ViewModel上使用带MVC(MVVM)的ViewModels时,验证应驻留在何处?(或者两者都有,或者两者都没有)?为什么?特别是考虑到ASP.NETMVC的V2即将面世,我提出了这个问题


那么复杂/自定义验证呢?

任何特定于业务的验证都应该在模型中。任何特定于网站的验证都可以在模型和/或ViewModel中完成。通过这种方式,您的业务逻辑(模型)可以移动到不同的界面(Windows、Web表单等)之后,您的验证将保持不变。

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

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

我考虑了一下:

  • 用户输入验证:绝对在控制器上,而不是在任何类型的模型上。示例:验证码
  • 在ViewModel上验证的视图相关数据(不是在ViewModel中,而是在ViewModel上)。示例:密码确认、必需的电子邮件
  • 业务规则验证肯定会进入模型验证。示例:所需电子邮件、折扣券应有效
  • 潜在用例(故事、场景等)验证。它不验证属性,而是验证整个流程的正确性。应该转到模型验证(或者在单独的层中更好)。示例:如果没有订单,一周内只能免费获得3件商品 在给定的时间段内放置
  • 注意:我将所需的电子邮件包括在2和3中,因为这通常取决于它所属的位置。
    如果电子邮件只起信息作用,那么验证可以放松,并将其推送到视图模型。如果电子邮件是应用程序的强烈要求,那么它肯定是模型验证

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

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

    干杯,

    Dmitry.

    mvvm标签?MVC的viewmodel不是MVVM模式中的viewmodels。MVVM主要基于MVC模式,但如果您能详细阐述您的评论(可能还有一些链接),我将不胜感激。