一方面,应保护不变量(以使无效状态尽早且最好在编译时而非运行时成为不可能),另一方面,将域知识传出域是错误的。
一方面,值对象首先保护了我们的领域不变量,另一方面,将它们用作命令或它的属性等同于传递领域知识。
既保护不变性又避免域知识泄漏域边界(封装域模型)的唯一解决方案,似乎是将聚集包裹在命令值对象映射器中 strong>。
我正在使用CQRS和ES。
在我的聚合根周围有一个包装作为 command-to-value-object-mapper 可以吗?还有其他解决方案吗?
答案 0 :(得分:2)
值对象可以具有约束,例如整数上的有效范围或字符串上的正则表达式。如果这些约束条件得到验证,并且值在相同的已编译代码边界中传递,那应该没问题。如果您在另一个边界中验证值,然后在反序列化之后仅接受它为有效值,那将是泄漏的。
这些命令只是表达意图。在处理有关当前域状态的命令时,将验证其值。域值被创建,并且既可以在内部进行验证,也可以通过其他域逻辑进行验证。