2009-12-12 29 views
5

哪裏是驗證將被模型使用的數據的最佳位置。例如,考慮註冊表格。我們有一些來自注冊表的數據。那麼哪裏是驗證這些數據的最佳位置。我們應該通過if語句或特殊的驗證器類來檢查每個數據,這意味着大量的編碼,所以我想知道在哪裏做這個地方。MVC模式中的驗證層

In Controller?或型號?

Both? 因爲有些數據應該由其他模型驗證?

如果您不確定確切的答案,請嘗試找到兩種方式的可能的優點和缺點。

回答

2

當然不是在控制器中,它的唯一任務應該就是控制請求/響應,並相互模型化和查看。在商業模式中進行。沒有一堆if語句,只是使用for循環和抽象驗證框架。

視圖中的驗證只能用於改善用戶體驗。在webapps中,視圖基本上是HTML頁面。在驗證中,只有在客戶端完全運行的Javascript纔可能。客戶端可以完全控制它,比如黑客/禁用它。使用JS驗證只有以改善用戶體驗(即更快的響應,不閃光的內容)。仍然在服務器端進行(相同)驗證以獲得更好的健壯性。

+0

但是有些數據應該由其他模型驗證?例如,在我們添加喜歡的視頻行之前,我們應該檢查視頻的存在。 – 2009-12-12 22:16:45

+0

在商業模式中也是如此。請注意,商業模式,而不是數據模型。 – BalusC 2009-12-12 22:18:34

+0

對不起,我認爲我對這些術語和它們的定義並不是很熟悉。可以給我任何來源,我可以學習它們 – 2009-12-12 22:23:32

7

驗證數據的來源應該在模型中,而實際檢查應該可能在視圖級別(可能使用javascript或UI提示)和模型級別完成。純粹主義者會建議這個觀點不應該參與,但我不同意。

+1

純粹主義者是對的,但純粹主義者也在桌面應用程序編程中學會了他們的技巧。在網絡中進行視圖以及模型具有節省往返HTTP請求的優勢。如果您擁有一臺桌面應用程序,並且所有內容都位於同一臺計算機上,並且通常佔用相同的內存空間,那麼很容易就會發現這種方法。所以你可能是對的。兩個都做。 – RibaldEddie 2009-12-12 22:06:38

+0

我不會使用JavaScript驗證** **,因爲它可以被黑客入侵/欺騙/禁用。只有不顯眼地使用它才能改善用戶體驗(即沒有請求 - 響應週期或內容閃爍)。 – BalusC 2009-12-12 22:16:46

+0

我同意。應該將數據傳遞給模型(在這種情況下爲$ _POST數組)並在那裏進行驗證。我也同意js的觀點。 – AntonioCS 2009-12-12 22:19:04

1

在您的模型中進行驗證可以防止您必須在一堆控制器中重複驗證代碼。

1

驗證應該在模型和我認爲的視圖中執行。