2010-05-07 71 views
6

我想學習領域驅動設計,最近讀了很多人主張爲您的視圖創建一個ViewModels,存儲您想要在給定的視圖中顯示的所有值。哪裏以及如何驗證和映射ViewModel?

我的問題是我該如何做表單驗證?我應該爲每個視圖創建單獨的驗證類,還是將它們組合在一起?我也對代碼中看起來像什麼感到困惑。

這是我現在是怎麼想的驗證和的ViewModels適合於對事物的計劃:

視圖(一些用戶輸入) - >控制器 - > FormValidation(的視圖模型) - >(如果有效的地圖視圖模型來域模型) - >域層服務 - >基礎設施

謝謝!

P.S.我使用Asp.net MVC與C#

回答

0

我一直在試驗將我的表單驗證放在ViewModel中,而對於複雜的業務驗證,我使用服務層。

這其實已經工作了真正的好和代碼是這麼容易閱讀和維護

0

我建議你把你的驗證規則在你的域模型。這是最簡單和重複的方式(使用System.ComponentModel.DataAnnotations,例如 - MVC 2默認模型綁定器支持開箱即用)。
如果您有複雜的大型寬域模型,並且您不會被具有相同名稱的映射屬性卡住 - 請嘗試使用AutoMapper,這是用於執行此類工作的極好工具。

0

驗證表示層上的視圖模型。請記住,您應該只驗證與演示文稿相關的驗證(日期格式正確,名稱!=「」等)。

Asp.net Mvc有一些in-built validation support通常足以進行基本驗證。

應用領域驅動設計時棘手的部分是域驗證。有可能會有複雜的規則,依賴庫和類似的東西,可以使'驗證運行',而不會使domain model dumb相當困難。

因此 - 從不讓域對象滑入invalid狀態似乎是個不錯的主意,只是在發生這種情況時拋出異常。


最好不要嘗試視圖模型機械地映射到域模型 - 這種方法增加了連接,可能會破壞你的域模型的封裝和啞下來。

0

這是一個常見的問題,它是一個並不總是有一個正確的答案。查看Derick Bailey的this post。這是一個很好的討論這個問題,並有幾個關於這個問題的其他偉大的職位的鏈接。

相關問題