将命令映射到 CQRS 中的值对象
Map commands to value objects in CQRS
一方面,应保护不变量(尽早避免无效状态,最好是在编译时而不是 运行 时),另一方面,将领域知识传递出领域是错了。
一方面,值对象首先保护我们的领域不变量,另一方面,将它们用作命令或作为它的属性等于传递领域知识。
既保护不变量又避免领域知识泄漏领域边界(封装领域模型)的唯一解决方案似乎是 将聚合包装在命令到值对象中-mapper.
我正在使用 CQRS 和 ES。
在我的聚合根周围有一个包装器作为 命令到值对象映射器 可以吗?还有其他解决方案吗?
值对象可以有约束,例如整数的有效范围或字符串的正则表达式。如果这些约束得到验证并且值在相同的编译代码边界中传递,那应该没问题。如果您验证另一个边界中的值,然后在反序列化后将其视为有效,那将是有漏洞的。
命令只是表达意图。在处理与当前域状态有关的命令时,会验证其值。域值已创建,并且可以在内部验证自身或由其他域逻辑验证。
一方面,应保护不变量(尽早避免无效状态,最好是在编译时而不是 运行 时),另一方面,将领域知识传递出领域是错了。
一方面,值对象首先保护我们的领域不变量,另一方面,将它们用作命令或作为它的属性等于传递领域知识。
既保护不变量又避免领域知识泄漏领域边界(封装领域模型)的唯一解决方案似乎是 将聚合包装在命令到值对象中-mapper.
我正在使用 CQRS 和 ES。
在我的聚合根周围有一个包装器作为 命令到值对象映射器 可以吗?还有其他解决方案吗?
值对象可以有约束,例如整数的有效范围或字符串的正则表达式。如果这些约束得到验证并且值在相同的编译代码边界中传递,那应该没问题。如果您验证另一个边界中的值,然后在反序列化后将其视为有效,那将是有漏洞的。
命令只是表达意图。在处理与当前域状态有关的命令时,会验证其值。域值已创建,并且可以在内部验证自身或由其他域逻辑验证。