我开始阅读有关CQRS的内容,我有点困惑.
是否允许在写入端调用读取端以获取其他信息?
http://cqrs.nu/Faq/command-handlers在这里他们说这是不允许的,但是在cqrs旅程代码中我发现他们称之为服务'IPricingService',它在内部使用DAO服务类.
那么我必须做些什么才能在我的聚合根中获得额外的信息?
Ale*_*rev 25
CQRS之旅不应被视为手册.这只是一个团队为CQRS而奋斗的故事,并且只有使用Microsoft堆栈的所有限制.本身,您不应该在命令处理程序或域逻辑中使用您的读取模型.但是,您可以从客户端查询读取模型,以获取命令所需的数据并验证命令.
由于我得到了一些关于这个答案的downvotes,我需要指出,我写的是模式中的既定实践.读取端不访问写入侧,写入侧也不从读取侧获取数据.
但是,"客户"的定义可能是讨论的主题.例如,我不相信面向公众的JS浏览器应用程序是一个合适的"客户端".相反,我会使用我的REST API层作为CQRS中的"客户端",而Web应用程序将只是该客户端的UI层.在这种情况下,REST API服务调用处理将是合法的读取端读取器,因为它需要验证所有UI层发送以防止伪造和验证某些业务规则.完成此工作后,将形成命令并将其发送到写入端.验证和其他所有内容都是同步的,然后命令处理是异步的.
更新:鉴于下面的一些分歧,我想指出Udi在2009年关于CQRS,特别是命令和验证的文章.
CQRS 常见问题解答 ( http://cqrs.nu/Faq ) 建议:
“如何在有界上下文之间进行通信?
仅限于其公共 API。这可能涉及订阅来自另一个有界上下文的事件。或者一个有界上下文可以像另一个有界上下文的常规客户端一样,发送命令和查询。”
因此,尽管在一个 BC 内不可能从写入端使用读取端,反之亦然,但另一个有界上下文或服务可以。本质上,这就像人类使用用户界面一样。
| 归档时间: |
|
| 查看次数: |
4722 次 |
| 最近记录: |