2009-08-10 113 views
24

在Model或ViewModel上使用ViewModels和MVC(MVVM)时,验证应该在哪里? (或两者兼得或不兼任)?为什么?尤其是针对ASP.NET MVC V2即将推出。验证:Model或ViewModel

复杂/定制验证如何?

+2

mvvm tag? MVC的viewmodel不是MVVM模式的视图模型。 – 2010-08-16 00:05:47

+0

MVVM很大程度上基于MVC模式,但是如果您对您的评论进行阐述(或许有一些链接),我将不胜感激。 – 2010-08-16 00:13:15

回答

19

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

5

模型。您的验证应该在您的业务层。您的视图模型应该只是为了获得您的视图设置。

11

我会说这是经常需要在各级:)

我想了一会儿约以下验证:

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

注:我包括所需的电子邮件到这两个2和3,因为它往往取决于它所属的地方。
如果电子邮件只起到信息的作用 - 然后验证可以轻松将其推到视图模型。如果电子邮件是应用程序的强大需求 - 这绝对是模型验证。

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

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

干杯,
德米特里。