2010-08-30 61 views
2

鑑於我的MVC和DDD(批判視需要)的認識:ASP.NET MVC 2數據驗證:這是否從DomainModel攜帶ViewModel?

  • 領域模型可以通過工廠創建,並通過持續信息庫。這些是POCO對象。
  • 視圖模型包含視圖所需的部分或完整域模型。它們由與存儲庫交互的服務生成。因此,領域模型從來沒有直接將其視爲視圖。同樣,ViewModels永遠不會持久。
  • 由於可以在多個視圖中顯示多個視圖模型,因此很可能會有多個視圖模型用於相同的域模型。

也就是說,向域模型添加數據驗證可以消除任何類型的冗餘。

那麼如何讓ViewModels繼承域模型數據驗證?

我不希望簡單地引用視圖模型中的域模型來工作。

回答

2

我在去年10月的模式&做法峯會上問了同樣的問題,同時對Brad Wilson說話,他沒有一個全球性的解決方案。

我和他討論過的一個想法是擴展一個對象映射庫,例如AutoMapper,以將驗證從域模型映射到視圖模型。

在設計一個框架,以促進這種情況下,一些事情要考慮:

  1. 驗證規則可能依賴於上下文,因此可能是唯一的特定視圖模型。企業庫驗證塊允許使用配置文件來設置驗證邏輯 - 例如,這可以擴展爲轉移到查看模型。

  2. 視圖模型可能具有不屬於域模型一部分的屬性,例如指定某個「同意條款」複選框已被選中的屬性。這個屬性需要驗證,但它是特定於視圖和用例,而不是域模型。這個場景是保證驗證邏輯至少部分分離的另一個參數。

  3. 出於維護和清晰的目的,可能更容易爲域模型和視圖模型複製某些驗證邏輯,而不是使用映射框架。