首页 > 解决方案 > 将命令映射到 CQRS 中的值对象

问题描述

一方面,不变量应该受到保护(为了使无效状态在早期变得不可能,最好在编译时而不是运行时),另一方面,将领域知识传递出领域是错误的。

一方面,值对象首先保护我们的领域不变量,另一方面将它们用作命令或作为它的属性等于传递领域知识。

保护不变量和避免域知识泄露域边界(封装域模型)的唯一解决方案似乎是将聚合包装在 command-to-value-object-mapper中。

我正在使用 CQRS 和 ES。

在我的聚合根周围有一个包装器作为命令到值对象映射器是否可以?还有其他解决方案吗?

标签: cqrsevent-sourcingaggregaterootvalue-objects

解决方案


值对象可以具有约束,例如整数上的有效范围或字符串上的正则表达式。如果验证了这些约束并且值在相同的编译代码边界中传递,则应该没问题。如果您验证另一个边界中的值,然后在反序列化后将其视为有效,那将是泄漏的。

命令只是表达意图。在处理与当前域状态相关的命令时,会验证其值。域值被创建并且可以在内部验证自己或由其他域逻辑验证。


推荐阅读