每次我開始處理新的ASP.NET MVC Web應用程序時,我不確定是否使用DataAnnotations
驗證。有些事情感覺不對。DataAnnotations或在服務中手動驗證?
例如,假設我有一個UserService
,它從AccountController
的Create
操作中通過CreateUserModel
。爲確保用戶始終提供名稱,我將模型的Name
屬性設置爲具有[Required]
屬性。我現在是安全的,除非它有一個名字,否則模型聯編程序永遠不會給我一個CreateUserModel
。
我的問題是,我的UserService
是我係統的一個可重用組件,它不能依賴上述層提供有效數據的事實,而且肯定也必須驗證此數據。當您考慮您可能要編寫一個完全重用UserService
(並且沒有模型聯編程序爲其進行所有數據註釋驗證)的Web服務時,需要進一步突出顯示這一點。
所以我的問題是:這種情況的最佳做法是什麼?使用數據註釋進行驗證並在服務中重複驗證?僅在服務中驗證並拋出異常?兩者的混合?
我希望我的問題不是太主觀,我主要試圖建立一個關於是否將驗證移動到數據註釋最終會讓我最終咬傷我的共識。
這就是我們所做的,除了我們將IValidationDictionary傳遞給作爲ModelState包裝器實現的服務層,以便服務層能夠直接向ModelState添加錯誤,但不會依賴於ASP.NET MVC。然後控制器不需要擔心管理向ModelState添加返回的錯誤。 – 2010-11-24 21:16:50