1

我正在使用 Windows 窗体数据绑定,实现类似IDataErrorInfo. 为了使其工作,域(或业务)对象被允许处于无效状态。实际上,域对象需要在用户输入时保留无效值IDataErrorInfo才能正常工作。只要对象不处于无效状态,我们就可以了。

但是,正如主题行所暗示的那样,我想知道约束和验证之间是否存在差异。前者会阻止用户进行更改,后者是我上面描述的验证类型。

让我解释一下——如果你有一个集合Person并且Person有一个SSN属性。是PersonCollectionkeyed on SSN,意思是在集合中,不能有两个Persons相同的SSN。如果我们在 上允许临时无效状态,我们会引入一种情况,即集合Person中有两个Persons重复的情况,尽管是暂时的。SSN这可能导致另一个对象使用PersonCollection,寻找Person具有重复对象的对象SSN,获取两个对象的问题。

所以,对我来说,似乎某些类型的验证需要是约束而不是(更改后)验证。

想法?

4

1 回答 1

1

以您为例,您对 的验证的一部分Person应该是检查其SSN是否不重复的规则(顺便说一句:在重复的情况下,您怎么知道哪个是正确的?)。

如果您遇到麻烦,因为您PersonCollection实际上是IDictionary由 s 键入SSN的,请等到 aPerson被验证后再将其添加到集合中。一个对象应该是暂时无效的,足以让你这样做。

有关验证的更多信息,请查看我对Business Objects, Validation And Exceptions的回答

于 2009-09-07T14:26:30.393 回答