我读过这本书Patterns, Principles, and Practices of Domain-Driven Design我真的很喜欢将DDD与CQRS和事件采购结合使用的方法。但我有一个问题。如何使用DDD \ CQRS \ Event Sourcing我可以获取历史数据吗?例如。我想写一个提供天气信息的服务。客户端可以从服务历史数据中请求。例如,去年伦敦的天气快照,绘制图形和客户端的步骤一小时可订阅实时数据以更新已构建的图形。题。如何使用DDD \ CQRS \ ES方法将历史数据发送给请求它们的客户端。我无法将事件直接发送到消息总线,因为该服务可能有多个客户端,并非所有客户端都需要这些数据。
更新。
我想在客户端展示这样的东西。
答案 0 :(得分:1)
如果我正确理解您的问题,您想要请求数据。 在CQRS中,在检索数据(通过查询)和写入/调整数据(通过命令)之间存在分离。 每当您想要更改数据(通过命令)时,您都会触发一个事件并将其保存到EventStore中。 您可以使用Projection为数据制作所需的演示文稿,甚至可以将其保存在另一个数据库中。
我会试着详细说明你的例子:
可能有可能将其他数据库保留,但它可能是一种更快地呈现查询的解决方案,因为此数据库(及其副本)仅负责您的应用程序内的读取,而您的eventstore执行所有繁重的工作(写入)。
答案 1 :(得分:0)
通常,为了获得历史视图,您只会加载聚合,只包含您感兴趣的时间段内的事件。这将为您提供当时的快照视图。
您如何获得当前的天气情况?为所需位置装载所有天气事件?
如果客户端正在完成所有图形绘制等,并且您只是提供事件,那么您可以简单地允许客户端通过您的api请求部分事件流。你不会出版'这些事件再次发送给所有客户,因为这些已经发生过。客户可能会打电话给你的api,以获得新的'事件或将会得到历史性的'事件或将在新事件发生之后获得事件。
至少这是我对它如何运作的理解。