事件采购:如何建模不同事件之间的关系?

时间:2018-04-14 02:38:45

标签: event-sourcing

我是Event Sourcing的新手,我遇到了一个例子,我不太确定不同方法的优点和缺点。

让我们说这是一个银行的例子,我有三个实体账户,存款和转账。

我的想法是,当使用存款时,命令bank.deposit将创建两个事件: deposit.createdaccount.deposited。我可以或应该在deposit.created中添加uuid事件account.deposited作为参考吗?

进入下一步,如果以后银行有转移功能,我应该单独制作一个事件account.transfer_received,还是应该创建一个更普遍的事件account.credited以供存款和转帐使用?

提前致谢。

1 个答案:

答案 0 :(得分:0)

要审核的好文章是Nobody Needs Reliable Messaging。一个关键的观察是您经常需要域级别的标识符。

例如,当我查看我的银行帐户,并看到帐户历史记录包含特定存款时,视图中会显示存款的标识符

如果您从事件来源的角度想象它,在存款之前余额为X,历史记录不包括存款12345;处理完存款后,余额为X + Y ,存款12345在帐户历史记录中

(这意味着,除其他外,如果出现第二存款12345副本,域模型将知道忽略它,即使事件的标识符不同。)

现在,您可能希望保留各种消息ID。参见Hohpe关于企业集成模式的工作;特别是Correlation Identifier

  

我应该做一个单独的活动

一般。 “做出隐含的,明确的”。当无处不在的语言区分两者时,两个事件恰好具有相似表征的事实并不是模糊它们的理由。

在动机方面,提供task based ui或避开generic repositories的用户有点类似。