2010-07-26 56 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中使用它。它絕對不應該進入模型。你的模型應該是「純粹」的數據。業務規則和驗證都不是業務規則。