2010-11-01 59 views

回答

4

驗證應在視圖模型來完成最低,因爲這是你得到什麼的操作參數,包含用戶輸入。你也可以在模型上進行驗證。

1

我的答案將是ViewModel,因爲模型可以改變(例如從使用Linq2SQL到EF)。這樣,當你插入另一個模型時,你仍然有你的驗證完好無損。

1

我個人有我的驗證2個地方使用DataAnnotations。我的模型沒有完全傳遞給我的觀點。我爲我的視圖分開模型,並將視圖模型中的數據轉換爲模型。這樣,我可以在我的視圖模型中放入任何我想要的東西,並省去我不想處理的部分。

但是,我的推理是我有一個Windows應用程序和一個使用相同模型的Web應用程序。這樣,同一組驗證規則就可以管理所有應用程序的模型,而且如果需要,我的視圖模型可能會有稍微不同的規則。當然,這會造成「邏輯重複」 - 也就是驗證邏輯。

這樣我就不必重建每一次回到服務器的頁面上都沒有使用的數據,或者將它放在隱藏字段中,並且擴大了我的頁面大小。

0

該模型應該執行驗證,以確保其狀態不會失效;該驗證絕對屬於該模型。例如,書籍類必須保證其標題必須在1到50個字符之間,其ID必須> = 0等。

業務規則屬於別處(如果您只有模型視圖和控制器層)。這可能是像用戶不能添加超過3本書,如果他們的電子郵件沒有驗證。

視圖中的驗證應限制爲解析用戶輸入的無效數據:反xss,sql注入,超出範圍。 etc

1

您應該在ViewModel中放入特定於UI的驗證,以及任何與模型中的業務流程或數據庫驗證相關的驗證。這些可能會重疊。

+0

感謝您的評論,所以我會使用數據註釋模型和viewmodel? (屬性) – Martin 2010-11-03 15:25:22