cqrs - 将命令映射到 CQRS 中的值对象
问题描述
一方面,不变量应该受到保护(为了使无效状态在早期变得不可能,最好在编译时而不是运行时),另一方面,将领域知识传递出领域是错误的。
一方面,值对象首先保护我们的领域不变量,另一方面将它们用作命令或作为它的属性等于传递领域知识。
保护不变量和避免域知识泄露域边界(封装域模型)的唯一解决方案似乎是将聚合包装在 command-to-value-object-mapper中。
我正在使用 CQRS 和 ES。
在我的聚合根周围有一个包装器作为命令到值对象映射器是否可以?还有其他解决方案吗?
解决方案
值对象可以具有约束,例如整数上的有效范围或字符串上的正则表达式。如果验证了这些约束并且值在相同的编译代码边界中传递,则应该没问题。如果您验证另一个边界中的值,然后在反序列化后将其视为有效,那将是泄漏的。
命令只是表达意图。在处理与当前域状态相关的命令时,会验证其值。域值被创建并且可以在内部验证自己或由其他域逻辑验证。
推荐阅读
- java - 如何打印非静态方法
- liquibase - DatabaseChangeLog 不记录 exectype 不是“EXECUTED”的行
- excel - 每个查找值在 Excel 中求和行数
- vb.net - 是否可以在表单 B(VB.NET)中显示表单 A 中的对象?
- c - 在 GTK 中使用多线程?
- amazon-web-services - 使用 Amazon API Gateway 和 CloudFront 缩短响应时间
- r - 在ggplot2中的特定位置放置背景图像并进行测量
- google-cloud-platform - GCE on Container + CloudSQL
- html - 视频播放完毕自动返回页面
- html - svg 打破位置:粘在移动浏览器上