我对CQRS很新 . 我通过AKKA学到了它 . 然而,AKKA提供了实施它的方法,它不是教你CQRS . 因此,人们最终可能会做出愚蠢的事情 .

我想澄清一些概念 .

假设我是一个带购物篮和库存的网站(我们还可以添加信用卡处理器) . 在akka术语中,我可能有一个代表购物篮的演员和库存的演员 . 在任何情况下,我在谈论演员与否并不是真正的关系 . 重要的是,我有独立的处理单元异步操作并通过消息进行通信 .

如果使用CQRS,我想了解这里的正确处理是什么:

1 - 购物Bakset演员,接收处理订单的命令(即购物篮) .

2 - 接下来会做什么:

2.1 - 它是否只是简单地创建一个事件OrderProcessed(篮子的内容),然后我不知道如何,但无论是否通过事件来源阅读期刊,都将处理它并更新查询视图的状态 .

要么

2.2 - 篮子演员将首先通过与所需的任何服务(包括库存)交谈来验证命令,然后要求库存移除物品,信用卡处理器,为卡充电,然后在确认ID后,创建事件OrderProcessed(篮子的内容) .

===>第二个选项(2.2 . )对我来说听起来更正确 . 查询视图可以从3个演员的日志中更新:Shoping Basket,Inventory和CreditCardProcessor .

Inventory和CreditCardProcessor都会要求发出包含交易It(即对购物篮的引用)的命令 .

一切都将在最后保持一致 .

===>另一个选项(2.1)听起来很复杂,很奇怪,最终会从购物篮的日志中更新查询视图 . 它不仅仅是触及一个交易表,它还可以更新库存表和信用收费表 . 更重要的是,不清楚何时应该对卡进行充电 . 我还是不知道 .

  • 我认为最后,我无法理解,假设在命令处理程序中的内容与在事件处理程序中应该是什么相反 .

  • 读取处理单元的日志以同步查询数据库,包括从事务到库存和信用卡收费之类的级联 . 或者这应该是来自系统其他部分的事件的一部分 .

我希望我能在这里得到一些明确的解释 .

非常感谢,

丹尼尔