【问题标题】:Constraint vs. Validation?约束与验证?
【发布时间】:2010-09-22 02:11:38
【问题描述】:

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

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

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

因此,在我看来,某些类型的验证似乎需要成为约束而不是(更改后)验证。

想法?

【问题讨论】:

    标签: validation data-binding oop constraints


    【解决方案1】:

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

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

    有关验证的更多信息,请查看my answerBusiness Objects, Validation And Exceptions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2015-02-03
      • 1970-01-01
      • 2015-06-27
      相关资源
      最近更新 更多