触发其他事件的事件 - 实际上在阿卡的传奇/过程管理者

时间:2016-03-29 05:01:05

标签: events akka domain-driven-design cqrs akka-persistence

我使用Akka持久性构建CQRS驱动的系统作为辅助项目和学习练习。我正在寻找一些关于我如何建模的帮助。

简而言之,我有一场比赛。纯粹的游戏机制是一个FSM(我实际上使用PersistentFSM对此进行建模)并且我已经读取了这个持久化actor的视图,前端客户端API查询该视图以确定在客户端呈现什么。这很有效。

游戏是基于单词的游戏。简而言之,你可以想象游戏中的每个玩家提交一些句子,然后确定这些句子的分数。根据分数,会发行一些硬币(游戏内币)。

因此,客户端可以向游戏发送命令。客户可以提交一个单词的句子。现在我实现这个作为客户端请求处理程序(我不知道这些在CQRS世界中可能与哪些相关,一个短暂的传奇/ PM?)获取后备FSM命令处理程序的actor并发送例如Commands.SubmitSentence(...)。然后,该命令处理程序处理该命令,验证该句子,并生成一些事件(SentenceSubmitted,作为一个明显的事件)。我不完全确定我是否应该从我的API级别直接向PersistentFSM发送命令,因此也欢迎输入。

我的主要问题是基于如何处理外围影响。例如,一旦每个玩家提交了句子,我们就需要生成积分和硬币。点数仅用于该游戏的视图中,但是如果玩家想要花钱,则需要将硬币保留在系统中的其他位置。我这样看着它:

  • 游戏根据句子/其他游戏因素计算硬币的得分和数量。这会生成一个事件" GameScoreCalculated"
  • 一些"听众"例如" CoinListener"订阅了这个计算事件(如果监听器是一个单独的,从Akka Persistence的说法,该事件有一些它订阅的标签)。我觉得,从我读过的所有内容来看,这是一种ProcessManager。我对Akka实现方面有点不清楚,无论是每个玩家一个,还是一个单身,或者在某种意义上是分片。
  • CoinListener确保它没有收到同一游戏的多个事件后,会生成一些命令来创建实际硬币(CreateCoin(playerId,...))并自行触发
  • CoinListener对那些CreateCoin做出反应以保留一些CoinCreated事件

稍后,当我构建个人资料和购买系统时,应用程序的这些区域将使用CoinCreated事件来聚合玩家实际拥有的硬币数量。

这是否有意义?

由于 瑞克

0 个答案:

没有答案