如何使用EventStore在银行帐户DDD样式之间进行资金转帐?

时间:2019-03-03 10:25:54

标签: domain-driven-design get-event-store

我们有一个帐户A和一个帐户B。我们希望在A和B之间转移资金/资金。假设我们有一个帐户的总根。根据Eric Evan的书,我们需要一个域服务来处理传输逻辑。 为了保持一致性,我们需要在单个交易中修改帐户A和帐户B。是否可以使用EventStore在单个事务中写入两个不同的流(帐户A和帐户B)?

1 个答案:

答案 0 :(得分:0)

  

是否可以使用EventStore在单个事务中写入两个不同的流(帐户A和帐户B)?

从V5 RC1(2018年12月)开始,我找不到任何证据表明Event Store支持对多个事件流进行协调写入。

假设您的数据模型正确,并且两个帐户确实确实属于不同的流:这意味着您没有硬性的交易边界需要管理,而是一个流程。

类比:考虑进行银行转帐-您认为我们是否可以通过一次交易将资金从美国银行的帐户转移到富国银行的帐户?

更常见的方法是在自己的流中管理传输过程,从而跟踪发生的一切。帐户更改仍然在彼此独立的流中进行。流程流负责业务流程-验证其他元素的确认。

流程的快乐路径可能类似于:

  1. 在流程流中记录转移请求
  2. 在帐户A流中记录提款
  3. 在流程流中记录提取资金的确认
  4. 在帐户B流中记录入金
  5. 在流程流中记录资金存入的确认
    • 记录流程流中已完成的流程

但是,如果您确实确实需要同时修改两个帐户 ,则需要将它们由相同的coarse grained lock管理。由于事件存储仅保证锁定在流级别,因此您需要重新评估数据模型。