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

won*_*rld 14 validation domain-driven-design invariants

我经常在DDD中看到术语" 不变量".Dino Esposito 在这里谈论它.如果我查看.NET库,我会看到一个ValidationAttribute类.是不变量验证规则一样吗?例如,如果订单总额超过250美元是不可变的,我可以说50%的折扣是可用的吗?

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

gui*_*e31 17

绝对地,验证是批准给定对象状态的过程,而在该状态甚至达到之前发生不变执行.

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

一直有效学派主张在确认所使用的不变量.我认为它与DDD和Aggregates完美配合.

  • 然而,有些人不会将一些基本验证规则视为域不变量,因为它们通常是从技术约束中获得的规则.例如,一些DDD从业者不能将电子邮件地址的最大长度视为业务不变量,因为业务不关心电子邮件的长度,但实际上必须设置技术约束(例如,使用数据库中的`varchar(500)`因为你不能对每个字段使用`varchar(max)`,否则每个数据库的最大行大小都会溢出. (4认同)
  • @wonderfulworld我更喜欢"商业规则"作为名称.最后是将对象保持在有效状态.验证通常处理可以作为业务规则一部分的数据格式.作为一个拇指规则:您使用验证来确保输入数据的格式有效,然后业务规则决定输入如何/如何更改模型. (4认同)

Gre*_*olf 5

是的,我想是这样

在 DDD 中,验证规则可以被认为是不变量。聚合的主要职责是在该聚合内的所有实体的状态更改之间强制执行不变量。

您可以在此页面中参考更多信息