在CQRS中,我如何保留有关观看次数的信息?例如用户访问特定页面x次
简单的答案是Read Model更新自己的表并递增计数。
但是如果我们需要从Write Model重新构建我们的Read Model呢?我们会丢失所有的查看计数统计信息。
Read Model是否应该调用Write Model并告诉它页面已被查看?
这个问题是Write Model现在有太多关于Read Models实现的信息,即Write Model不应该知道read模型如何显示页面。它应该与所有Read Models分离。
人们如何在他们的系统中实现这一点?
答案 0 :(得分:1)
您可能希望跟踪或存储的任何数据都是通过写入模型完成的,您不应仅仅因为某些事情看起来微不足道或打破问题而打破CQRS的原则。
在这种特殊情况下,您正在引入数据视图跟踪域,它不需要知道其数据的来源。
如果您使用EventSourcing作为数据存储,则可以在收到页面请求时将整个内容短路并发出DataViewedEvent
。
该命令类似于dataViewed(obj),其中obj可以是读取模型所需的任何内容。然后将obj附加到DataViewedEvent。
这意味着当读取模型接收到DataViewedEvent时,它可以查看事件中保存的obj类型,并仅将其传递给关注该obj类型的处理程序。
e.g。
查看第X页。调用dataViewed(PageXViewed)命令。 Read Model接收dataViewed事件,查看存储在其中的对象,将PageXViewed传递给关心该页面视图的处理程序。