不变量和验证规则有什么区别?

时间:2015-05-12 12:02:26

标签: validation domain-driven-design invariants

我经常在DDD中看到不变量这个词。 Here Dino Esposito谈论它。如果我查看.NET库,我会看到ValidationAttribute类。 不变量验证规则是否相同?例如,只有当订单总额超过250美元时才可以说 50%折扣是不可变的吗?

或者它们是不同的,其中不变量是保护对象变得无效,验证是检查对象的有效性,即使它已经改变了它的状态(它可能处于有效或无效状态)?在上面的例子中,如果我使用不变量,我在更新折扣之前检查不变量,并且在验证的情况下,我应用50%折扣然后检查有效性(对象已经处于无效状态)。 / p>

2 个答案:

答案 0 :(得分:14)

当然,验证是批准给定对象状态的过程,而在该状态甚至达到之前就发生了不变执行。

一个必然结果是,不变执行最好由自身变异(或创建)的东西执行,如自我保护反射,而验证通常由第三方完成。

Always valid学派主张使用不变量而不是验证。我认为它与DDD和Aggregates完全吻合。

答案 1 :(得分:1)

是的,我想是

  

在DDD中,可以将验证规则视为不变式。主要的   集合的责任是在整个州内强制不变式   该集合中所有实体的更改。

您可以在此page

中引用更多信息