2010-07-26 61 views

回答

10

的优势我会说:在他们中都没有关于做法。验证应该是分开的。诸如FluentValidation之类的框架允许您将验证逻辑与模型完全分开。但是为了回答你的问题,我会把验证放到视图模型中,因为那些是你绑定控制器动作的类。您也可以拥有多个与同一模型绑定但具有不同验证规则的视图模型。

+0

好点!您也可以拥有多个与同一模型绑定但具有不同验证规则的视图模型。 – GibboK 2012-06-29 07:21:59

+0

我没有看到与同一模型绑定的_View模型的任何场景,但具有不同的验证规则_ – 2015-10-02 09:14:27

4

将您的注释放入您的Viewmodel中。

它可以具有用于每个DataModel的,例如DisplayModel,EditModel,..的ListModel所有这些可能需要不同的注解的多个的ViewModels。

一般认为最好的做法不是直接暴露你的DataModel到一个视图,espcicially在“POST” /编辑场景。

我建议您阅读Brad Wilson的很好的概括在:http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

这些文章主要涉及使用内MVC2 Dislpay和编辑模板,但清楚地说明就最好使用视图模型模式

0

那么我的意见是:这取决于。 我通常控制我在控制器和模型中的输入,所以输入在控制器和模型中均有效。这是为了防止我想将模型绑定到另一种应用程序。说,WPF。

不过,很多人也采用“防守式编程”。这意味着对函数(参数)的每个输入都会被检查。在这种情况下,一次输入可能会被检查几次,但是您确保即使您改变了某些内容,验证逻辑也会保留。

所以对我来说,一对夫妇的问题出现了:

1)是否有任何机会,有可能是在验证逻辑被旁路的场景。就像将模型绑定到wpf应用程序一样。

2)我是否想通过检查每个函数的输入来影响性能而不是确保安全性?

对我来说this文章横切关注点也有帮助。

这些是我对这件事的想法。希望它有帮助

1

如果你遵循单一职责,那么它可能应该进入它自己的组件。话虽如此,如果你想做一个捷径,可以在ViewModel中使用它。它绝对不应该进入模型。你的模型应该是“纯粹”的数据。业务规则和验证都不是业务规则。