2011-07-24 99 views
93

您更喜歡哪種方法來進行ASP.NET MVC驗證?爲什麼? Fluent ValidationData annotations?任何其他?Fluent驗證與數據註釋

+132

我討厭這個關於StackExchange的「不建設性」的東西。我很確定StackOverflow是問這類問題的最佳地點,因爲這裏有很多有真正經驗和豐富知識的人。 – SiberianGuy

+39

還有一點很有趣,值得注意的是,那些不具有建設性的問題通常會有很多upvotes,所以它們實際上對人有幫助。這件事有一定的問題 – Dmitry

+4

「封閉不具有建設性」......我在下面的答案中看到大量的事實! – felickz

回答

89

我喜歡Fluent Validation

  1. 它給我的我的驗證規則
  2. 做不同性質的條件驗證更好的控制容易得多相比,數據註釋
  3. 它分離驗證從我的視圖模型
  4. Unit testing與數據註釋相比要容易得多
  5. 它具有優秀的客戶端驗證支持大多數標準驗證規則
+6

從這個更多的觀點來看(http://www.webdevbros.net/2010/12/03/asp-net-mvc-fluent-validation-and-tesing /)文章:1.太多的註釋讓你的模型看起來很醜(類似於你的觀點3)2.更好的可重用性3.更好的性能(作爲不反射) – SiberianGuy

+0

@Idsa性能點聽起來很可疑,只需要在每個模型中進行一次反射,這假設一個好的實現,我不知道這個特定的實現是如何工作的。 – CodesInChaos

+0

@CodeInChaos,看起來像你是對的。但我會保留在那裏,因爲我也不確定(也懶得發現)它是如何實現的。 – SiberianGuy

17

我明明喜歡數據註釋因爲......

  1. 所有驗證規則可以在一個地方配置代碼(模型元數據類中),並且不需要在任何地方重複其他。
  2. 當使用數據註釋屬性時,對客戶端驗證(再次 - 沒有重複的驗證規則!)有很好的支持。
  3. 數據註釋屬性可以是測試以確保它們在那裏。
  4. 還有不錯社區創建的其他驗證屬性(例如Data Annotations Extensions)。
+2

我認爲大多數這些屬性都可以通過某種形式的流暢驗證來實現。我不知道OP中的圖書館是否支持這一功能,但原則上這是可能的,也不是很難。 – CodesInChaos

+0

什麼是測試屬性的存在點?這不是基本上重複驗證規則? – Sam

+23

@Sam:通過測試屬性是否使用數據註解屬性進行修飾,您不會測試屬性本身的功能;你只是確保它在那裏。我現在應該說,現在,兩年後,我在達林身邊並同意他的回答。 –