CQRS – EventListener可以调用命令吗?

发布时间:2020-08-03 整理:编程之家
编程之家收集整理的这篇文章主要介绍了CQRS – EventListener可以调用命令吗?编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随编程之家小编过来看看吧!
我想在我的项目中使用CQRS模式的元素.我想知道我是否使用Command and Events做得对.
我不确定的是事件是否可以调用命令.为了更好地展示我想做什么,我将使用图表和示例.

这是一个例子:

用户调用TripCreateCommand. TripCreateCommandHandler完成他的工作,并在成功发布TripCreatedEvent之后.

现在我们有两个TripCreatedEvent监听器(监听器执行顺序无关紧要)

第一个监听器(可以在第二个监听器之后执行):

对于trip.author.friends中的每个用户调用两个命令(命令的顺序很重要)

> PublishTripOnUserWallCommand
> SendNewTripEmailNotificationCommand
> SendNewTripPlatformNotification

第二个监听器(可以在第一个监听器之前执行):

> PublishTripOnUserSocials

这是示例图:

这是一个好方法吗? EventListener可以调用Command,或者我应该以其他方式执行它吗?

解决方法

您的问题是关于Mesage Driven Architecture,它与CQRS一起使用但与CQRS无关.

无论如何,你的图表几乎是正确的.事件订阅者/处理程序(我更喜欢这个术语)可以通过服务总线发送新的命令,但是你不应该总是这样做.我直接在事件处理程序中实现了很多功能,尽管probalby在发送新命令时会更加干净和可靠.这真的取决于我想做什么.

请注意,消息处理程序(命令或事件)不应该知道其他处理程序.他们应该知道公共汽车和公共汽车负责处理.这意味着在您的应用程序中,事件处理程序将把总线作为依赖项,创建命令并通过总线发送它.事件处理程序本身不知道命令处理程序生成了什么事件,并且可以“回复”它.

通常命令将独立处理,你不能保证顺序(除非它们是同步处理的),所以你可能希望第二个命令是由第一个命令处理后发出的.事实上,佐贺可能就是这种情况.

AFAIK你只是在谈论同步的事情,所以你的方法适用于这种情况,但它可能无法扩展.转向异步处理将破坏此执行流程.但是你的应用程序可以很好用,不是每个人都需要推特.

消息驱动的体系结构并不是那么简单,对于某些情况(就像你想要后端立即响应),实现起来相当复杂,至少比使用“标准”方法更复杂.因此,对于那些特殊情况,您可能希望以“旧”方式进行.

如果您担心脱钩和测试,您仍然可以设计服务,因为它们是消息处理程序,但是直接使用它们而不是服务总线.

总结

以上是编程之家为你收集整理的CQRS – EventListener可以调用命令吗?全部内容,希望文章能够帮你解决CQRS – EventListener可以调用命令吗?所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478
编程之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!