[CQRS是否要命令,这是问题

问题描述 投票:1回答:1

我是CQRS的新手,但是可以看到其中的价值,所以我试图将其应用到我们正在忙于重建的金融系统中。

就像我提到的,这是一个具有基本余额,提款,存款功能的基本金融系统。

我有提款和存款命令。但是我正在努力平衡。

根据领域专家,他们希望代表客户将余额作为一项交易进行,但没有财务影响(尚未)。因此,当客户端通过设备进行余额查询时,它会创建交易,同时也会创建余额查询。

在CQRS世界中,您区分使状态和查询发生突变的命令,这些命令以某种方式检索数据。

抱歉,如果我的理解有误。有人可以指出我正确的方向吗?

编辑:也许让我这样说。我当时正在考虑创建一个CheckBalanceCommand来创建一个事务,并将BalanceCheckedEvent插入商店。但是然后,我还需要创建一个CheckBalanceQuery来从读取的数据库中检索实际余额。我需要同时调用这两者才能满足余额请求。

domain-driven-design cqrs
1个回答
0
投票

这是一个有趣的问题。您的业​​务案例是有效的:某些命令不会使聚合/实体状态发生突变,仍然会对其进行处理,并且它们产生的事件也很重要(例如,对于审计跟踪)。

为了支持这些情况,我引入了一个名为IdentityEvent的基本事件类型(受到各种数学运算符的标识值的启发,并为该概念提供了证明;对某个值进行操作不会改变它) 。发出相应的命令后,此事件的派生内容(例如您的情况为BalanceCheckedEvent)将附加到集合的事件流中,并且视图投影可以照常从中构造视图;但是,从事件流中重构实体时,他们的mutate方法将不执行任何实际的突变

实际的命令处理发生在域层

应用程序层上的某些应用程序服务接收查询请求,并照常进行处理。此外,在查询操作之前或之后,同一应用程序服务可以在聚合根本身上将命令发布到域层。我认为这不违反任何原则(最重要的是将读取和查询模型分离)。
© www.soinside.com 2019 - 2024. All rights reserved.