在模型或视图模型中放入数据验证注释是否是最佳实践?一种方法相对于另一种方法的优点/缺点是什么?使用数据注释MVC验证 - 模型类或视图模型类?
好奇,看看大家都在把自己的验证,我目前做的样板工程。但是我看到有些人说这不是最佳做法。
在模型或视图模型中放入数据验证注释是否是最佳实践?一种方法相对于另一种方法的优点/缺点是什么?使用数据注释MVC验证 - 模型类或视图模型类?
好奇,看看大家都在把自己的验证,我目前做的样板工程。但是我看到有些人说这不是最佳做法。
的优势我会说:在他们中都没有关于做法。验证应该是分开的。诸如FluentValidation之类的框架允许您将验证逻辑与模型完全分开。但是为了回答你的问题,我会把验证放到视图模型中,因为那些是你绑定控制器动作的类。您也可以拥有多个与同一模型绑定但具有不同验证规则的视图模型。
将您的注释放入您的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和编辑模板,但清楚地说明就最好使用视图模型模式
那么我的意见是:这取决于。 我通常控制我在控制器和模型中的输入,所以输入在控制器和模型中均有效。这是为了防止我想将模型绑定到另一种应用程序。说,WPF。
不过,很多人也采用“防守式编程”。这意味着对函数(参数)的每个输入都会被检查。在这种情况下,一次输入可能会被检查几次,但是您确保即使您改变了某些内容,验证逻辑也会保留。
所以对我来说,一对夫妇的问题出现了:
1)是否有任何机会,有可能是在验证逻辑被旁路的场景。就像将模型绑定到wpf应用程序一样。
2)我是否想通过检查每个函数的输入来影响性能而不是确保安全性?
对我来说this文章横切关注点也有帮助。
这些是我对这件事的想法。希望它有帮助
如果你遵循单一职责,那么它可能应该进入它自己的组件。话虽如此,如果你想做一个捷径,可以在ViewModel中使用它。它绝对不应该进入模型。你的模型应该是“纯粹”的数据。业务规则和验证都不是业务规则。
好点!您也可以拥有多个与同一模型绑定但具有不同验证规则的视图模型。 – GibboK 2012-06-29 07:21:59
我没有看到与同一模型绑定的_View模型的任何场景,但具有不同的验证规则_ – 2015-10-02 09:14:27