Validation 约束与验证?
我正在使用Windows窗体数据绑定,实现像Validation 约束与验证?,validation,data-binding,oop,constraints,Validation,Data Binding,Oop,Constraints,我正在使用Windows窗体数据绑定,实现像IDataErrorInfo这样的接口。为了使其工作,允许域(或业务)对象处于无效状态。事实上,域对象需要保留用户输入的无效值,以便IDataErrorInfo正常工作。只要对象没有保持在无效状态,我们就可以了 然而,正如主题行所暗示的,我想知道在约束和验证之间是否有区别。前者将阻止用户进行任何更改,后者是我上面描述的验证类型 让我解释一下-如果您有Person的集合,并且Person具有SSN属性。PersonCollection已键入SSN,这意味
IDataErrorInfo
这样的接口。为了使其工作,允许域(或业务)对象处于无效状态。事实上,域对象需要保留用户输入的无效值,以便IDataErrorInfo
正常工作。只要对象没有保持在无效状态,我们就可以了
然而,正如主题行所暗示的,我想知道在约束和验证之间是否有区别。前者将阻止用户进行任何更改,后者是我上面描述的验证类型
让我解释一下-如果您有Person
的集合,并且Person
具有SSN
属性。PersonCollection
已键入SSN
,这意味着在该集合中,不能有两个人员具有相同的SSN
。如果我们允许Person
上的临时无效状态,我们将引入一种情况,即集合中有两个Person
具有重复的SSN
,尽管是临时的。这可能会导致另一个对象与PersonCollection
一起工作,寻找具有重复的SSN
的Person
对象,得到两个对象的问题
因此,在我看来,某些类型的验证需要是约束,而不是(变更后)验证
想法?以您为例,您对人员的验证的一部分应该是检查其SSN
是否重复的规则(顺便问一下:如果是重复,您如何知道哪一个是正确的?)
如果您遇到问题,因为您的PersonCollection
实际上是一个由SSN
s键入的IDictionary
,请等待Person
验证后再将其添加到集合中。对象应该暂时无效,足以让您这样做
有关验证的更多信息,请查看。以您的示例为例,您对人员的部分验证应该是一个规则,用于检查其SSN
是否重复(顺便问一下:如果重复,您如何知道哪一个是正确的?)
如果您遇到问题,因为您的PersonCollection
实际上是一个由SSN
s键入的IDictionary
,请等待Person
验证后再将其添加到集合中。对象应该暂时无效,足以让您这样做
有关验证的更多信息,请查看