如何使用 EventStore 在银行账户 DDD 风格之间进行资金转账?
How to fund transfer between bank accounts DDD style with EventStore?
我们有一个账户 A 和一个账户 B。我们想要在 A 和 B 之间转账 funds/money。假设我们有一个账户的聚合根。根据 Eric Evan 的书,我们需要一个域服务来处理传输逻辑。
为了立即保持一致性,我们需要在单个事务中修改账户 A 和账户 B。是否可以使用 EventStore 在单个事务中写入两个不同的流(帐户 A 和帐户 B)?
Is it possible to write to two different streams (account A and account B) in a single transaction using EventStore?
截至 V5 RC1(2018 年 12 月),我找不到任何证据表明 Event Store 支持对多个事件流的协调写入。
假设您的数据模型是正确的,并且两个帐户确实属于不同的流:这意味着您没有要管理的硬事务边界,而是一个流程。
打个比方:考虑一次银行转账——您认为我们会在一次交易中将钱从美国银行的账户转移到富国银行的账户吗?
更常用的方法是在自己的流中管理传输过程,它会跟踪发生的一切。对帐户的更改仍然发生在它们自己的流中,彼此隔离。流程流负责编排——验证来自其他元素的确认。
流程的快乐路径可能类似于:
- 在流程流中记录转移请求
- 记录账户A流出金
- 在流程流中记录取款的确认
- 记录账户B流中的资金入金
- 记录流程流中资金存入的确认
- 在流程流中记录完成的流程
但是如果你真的需要同时修改两个账号,那么你需要让他们由同一个coarse grained lock管理。由于事件存储仅保证在流级别锁定,因此您需要重新评估数据模型。
我们有一个账户 A 和一个账户 B。我们想要在 A 和 B 之间转账 funds/money。假设我们有一个账户的聚合根。根据 Eric Evan 的书,我们需要一个域服务来处理传输逻辑。 为了立即保持一致性,我们需要在单个事务中修改账户 A 和账户 B。是否可以使用 EventStore 在单个事务中写入两个不同的流(帐户 A 和帐户 B)?
Is it possible to write to two different streams (account A and account B) in a single transaction using EventStore?
截至 V5 RC1(2018 年 12 月),我找不到任何证据表明 Event Store 支持对多个事件流的协调写入。
假设您的数据模型是正确的,并且两个帐户确实属于不同的流:这意味着您没有要管理的硬事务边界,而是一个流程。
打个比方:考虑一次银行转账——您认为我们会在一次交易中将钱从美国银行的账户转移到富国银行的账户吗?
更常用的方法是在自己的流中管理传输过程,它会跟踪发生的一切。对帐户的更改仍然发生在它们自己的流中,彼此隔离。流程流负责编排——验证来自其他元素的确认。
流程的快乐路径可能类似于:
- 在流程流中记录转移请求
- 记录账户A流出金
- 在流程流中记录取款的确认
- 记录账户B流中的资金入金
- 记录流程流中资金存入的确认
- 在流程流中记录完成的流程
但是如果你真的需要同时修改两个账号,那么你需要让他们由同一个coarse grained lock管理。由于事件存储仅保证在流级别锁定,因此您需要重新评估数据模型。