我是Event Sourcing的新手,我遇到了一个例子,我不太确定不同方法的优点和缺点。
让我们说这是一个银行的例子,我有三个实体账户,存款和转账。
我的想法是,当使用存款时,命令bank.deposit
将创建两个事件:
deposit.created
和account.deposited
。我可以或应该在deposit.created
中添加uuid
事件account.deposited
作为参考吗?
进入下一步,如果以后银行有转移功能,我应该单独制作一个事件account.transfer_received
,还是应该创建一个更普遍的事件account.credited
以供存款和转帐使用?
提前致谢。
答案 0 :(得分:0)
要审核的好文章是Nobody Needs Reliable Messaging。一个关键的观察是您经常需要域级别的标识符。
例如,当我查看我的银行帐户,并看到帐户历史记录包含特定存款时,视图中会显示存款的标识符。
如果您从事件来源的角度想象它,在存款之前余额为X,历史记录不包括存款12345;处理完存款后,余额为X + Y ,存款12345在帐户历史记录中。
(这意味着,除其他外,如果出现第二存款12345副本,域模型将知道忽略它,即使事件的标识符不同。)
现在,您可能希望保留各种消息ID。参见Hohpe关于企业集成模式的工作;特别是Correlation Identifier。
我应该做一个单独的活动
一般。 “做出隐含的,明确的”。当无处不在的语言区分两者时,两个事件恰好具有相似表征的事实并不是模糊它们的理由。
在动机方面,提供task based ui或避开generic repositories的用户有点类似。