25

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

复杂/自定义验证呢?

4

3 回答 3

19

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

于 2009-08-10T02:10:07.643 回答
11

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

我想了一会儿关于以下内容:

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

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

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

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

干杯,
德米特里。

于 2009-08-10T05:00:18.843 回答
5

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

于 2009-08-10T02:46:59.613 回答