Validation 约束与验证?

Validation 约束与验证?,validation,data-binding,oop,constraints,Validation,Data Binding,Oop,Constraints,我正在使用Windows窗体数据绑定,实现像IDataErrorInfo这样的接口。为了使其工作,允许域(或业务)对象处于无效状态。事实上,域对象需要保留用户输入的无效值,以便IDataErrorInfo正常工作。只要对象没有保持在无效状态,我们就可以了 然而,正如主题行所暗示的,我想知道在约束和验证之间是否有区别。前者将阻止用户进行任何更改,后者是我上面描述的验证类型 让我解释一下-如果您有Person的集合,并且Person具有SSN属性。PersonCollection已键入SSN,这意味

我正在使用Windows窗体数据绑定,实现像
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
验证后再将其添加到集合中。对象应该暂时无效,足以让您这样做

有关验证的更多信息,请查看