我正在使用Windows窗体数据绑定,实现IDataErrorInfo
之类的接口。为了使其工作,允许域(或业务)对象处于无效状态。实际上,域对象需要保留用户输入的无效值,以使IDataErrorInfo
正常工作。只要对象没有保持无效状态,我们就可以了。
然而,正如主题一栏所示,我想知道约束与验证之间是否存在差异。前者会阻止用户进行全部更改,后者是我上面描述的验证类型。
让我解释一下 - 如果您有Person
和Person
的集合,则SSN
属性。 PersonCollection
上的SSN
键入Persons
,这意味着在集合中,不能有两个SSN
具有相同的Person
。如果我们在Persons
上允许暂时无效状态,我们会引入一种情况,即集合中有两个SSN
重复PersonCollection
,尽管是暂时的。这可能导致另一个使用Person
的对象查找带有重复SSN
的{{1}}对象的问题,从而获得两个对象。
所以,对我而言,似乎某些类型的验证需要是约束而不是(更改后)验证。
思想?
答案 0 :(得分:1)
举个例子,Person
的部分验证应该是检查其SSN
不重复的规则(顺便说一下:如果重复,你怎么知道哪一个是对的?)。
如果您遇到麻烦,因为PersonCollection
实际上是由IDictionary
键入的SSN
,请等待Person
验证后再添加到{{1}}采集。对象应该暂时无效,以便让您这样做。
有关验证的详细信息,请查看my answer至Business Objects, Validation And Exceptions。