回答

6

因爲我不想開始一個新問題,所以遲到了討論。我來自哪裏的是確定適用於中型ASP.NET MVC項目的最佳實踐。

讓我先總結一下我們的選擇: -

1)IDataErrorInfo的簡單實現。所有你需要的是在Model類中派生IDataErrorInfo。問題在於你讓模型綁定來執行業務規則。業務規則應該由模型執行。另一個用於IDataErrorInfo的捕獲(同樣適用於DataAnnotations)是(從Steven Sanderson's book轉述它不能報告與單個屬性有關的多個錯誤或與該whle對象模型有關的多個錯誤。)

2)DataAnnotation對我來說就像模式檢查(驗證)。這是您的應用程序應該執行的第一個檢查。但是(恕我直言),它不適合實施你的業務規則。

3)實現你自己的ModelBinder。儘管可以這樣做,但嚴肅地說,ModelBinder的用法是解析數據並將其綁定到您的模型,而不是執行復雜的驗證和業務規則檢查。我將離開業務規則檢查在您的模型/域層中實施。

4)自己動手 - 通過服務層進行驗證(見this。所示示例具有使用接口類與控制器和模型狀態分離的優點,另一種選擇是從模型層中引發適當的異常。當你在一個單獨的應用程序(例如WCF應用程序)中實現服務層時,後一選項非常有用。打算採用),爲什麼?

乾杯

+0

關於第1點,我相信INotifyDataErrorInfo將在.Net 4.5中受支持,並且會處理單個屬性的多個錯誤。 – 2012-04-11 15:40:18

5

看起來DataAnnotations在MVC 2.0中獲得官方支持。 Scott Guthrie在使用DataAnnotations在2.0中進行模型驗證時發佈了good article。鑑於該團隊似乎是朝着這個方向發展的,你可能會認爲這是一個有利於投票的選舉。

4

DataAnnotations更容易實現,並直接支持MVC 2.0。

然而,IDataErrorInfo允許你做更復雜的驗證(即:產生多個屬性的驗證等)。

然而,這兩者可以混合使用。沒有什麼能阻止你實施這兩種技術。

+0

這也是possi使用IValidatableObject接口與ComponentModel.DataAnnotations結合使用。有了這個接口,你也可以執行一個產生多個屬性的驗證。 – 2012-11-29 12:22:37