Event Sourcing vs Command Sourcing

13-07-29 banq
    

Event Sourcing vs Command Sourcing - Think Before Coding一文作者认为MartinFowler在其网站定义的EventSourcing其实是Command Sourcing。

他认为:一个命令应该是让系统做什么,系统可以做成功,也可以做失败,而一个命令是系统已经发生的改变,无法挽回。

因为事件是一种流,作者提出一个上游事件的概念,上游事件是将前往一个reactor,这个reactor会在系统内产生一个Arrive命令,这是现在时,而系统产生了一个ShipArrived事件,这是过去时,说明这个事件已经被系统自己产生了。

    

tangxuehua
2013-07-29 14:39

这篇文章批评的有道理。

command是让系统做事情的;

event是系统发生的变化;

如果是event sourcing,那应该不会有martin说的那些问题,event sourcing中文翻译为事件溯源,就是用事件来重建整个domain的状态,这个重建过程与外部系统无关。只有command sourcing才会有martin说的那些问题。

banq
2013-07-29 15:03

2013-07-29 14:39 "@tangxuehua

"的内容

这篇文章批评的有道理 ...

呵呵,不知MF做如何反应....

w438418754
2013-07-29 16:30

2013-07-29 11:03 "@banq

"的内容

而一个命令是系统已经发生的改变,无法挽回。 ...

这里应该指的是事件吧

我前两天也在想,如果用CQRS+EDA 那么是保存command 还是保存event,保存command可以达到保存event同意的状态改变效果,但是会多出其他的一些操作,如写日志,发送邮件的额外的操作

banq
2013-07-29 17:27

2013-07-29 16:30 "@w438418754

"的内容

这里应该指的是事件吧 ...

是的,前面笔误,更正如下:

他认为:一个命令应该是让系统做什么,系统可以做成功,也可以做失败,而一个事件是系统已经发生的改变,无法挽回。

我认为保存的事件是那些直接导致状态变化的事件,见这个讨论:

http://www.jdon.com/45619