【问题标题】:Validation: Model or ViewModel验证:模型或视图模型
【发布时间】:2010-11-18 04:15:59
【问题描述】:

在使用带有 MVC (MVVM) 的 ViewModel 时,验证应该在 Model 还是 ViewModel 上进行? (或两者都或两者都不是)?为什么?鉴于 ASP.NET MVC V2 即将推出,我特别提出这一点。

复杂/自定义验证呢?

【问题讨论】:

  • mvvm 标签? MVC 的视图模型不是 MVVM 模式的视图模型。
  • MVVM 主要基于 MVC 模式,但如果您能详细说明您的评论(可能带有一些链接),我将不胜感激。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    我想了一会儿:

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

    注意:我将 必填电子邮件 包含在 2 和 3 中,因为它通常取决于它所属的位置。
    如果电子邮件仅起到提供信息的作用——那么可以放宽验证并将其推送到视图模型。如果电子邮件是应用程序的强项要求 - 它肯定是模型验证。

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

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

    干杯,
    德米特里。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2010-11-18
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多