2008-11-12 106 views
1

我正在使用Windows Forms Databinding,實現像IDataErrorInfo這樣的接口。爲了使其發揮作用,域(或業務)對象被允許處於無效狀態。實際上,域對象需要在用戶輸入IDataErrorInfo才能正常工作時保留無效值。只要對象沒有被保持在無效狀態,我們就可以。約束與驗證?

但是,由於主題行暗示我想知道是否有限制和驗證之間的區別。前者將阻止用戶在AT ALL上進行更改,後者是我上面描述的驗證類型。

讓我解釋一下 - 如果你有一個集合PersonPerson有一個SSN屬性。 PersonCollection的鍵是SSN,意思是在集合中,不能有兩個PersonsSSN相同。如果我們在Person上允許臨時無效狀態,我們介紹在集合中有兩個Persons的副本SSN的情況,儘管是暫時的。這可能會導致另一個對象與PersonCollection一起使用,尋找具有重複的SSNPerson對象的問題,從而獲得兩個對象。

因此,對我而言,似乎某些類型的驗證需要約束而不是(更改後)驗證。

想法?

回答

1

舉一個例子,Person的部分驗證應該是檢查其SSN不是重複的規則(順便說一句:如果重複,您怎麼知道哪個是對的?)。

如果你遇到麻煩,因爲你的PersonCollection,其實是由SSN小號鍵入一個IDictionary,等到Person驗證你把它添加到集合之前。一個對象應該暫時無效,讓你這樣做。

有關驗證的更多信息,請檢查my answerBusiness Objects, Validation And Exceptions