我们有一个使用 GetEventStore 的事件源系统,其中命令端和非规范化程序在两个单独的进程中运行。
我有一个事件处理程序,它作为用户保存应用程序(ApplicationSaved 事件)的结果发送电子邮件,我需要更改它以便给给定应用程序只发送一次电子邮件。
我可以看到几种方法,但我不确定哪种方法是正确的。
1) 我可以在读取存储中查看是否有匹配的应用程序,但是当我的电子邮件处理程序处理事件时,不能保证数据会在那里。
2)我可以将一些东西附加到我的 ApplicationSaved 事件中,Revision
这可能会在每次后续保存时增加。然后我只发送电子邮件,如果Revision
是 1。
3)在我的事件处理程序中,我可以使用存储库从我的事件存储中为匹配的客户加载事件,并建立一个与我域中的聚合分开的聚合。它可以包含我可以用来做出决定的应用程序列表。
我的想法:
1)这似乎是不行的,因为数据可能在也可能不在读取存储中
2)如果数据可以从事件流中派生,那么它不需要在事件本身上。
3)我倾向于这个,但是读和写之间应该有一个明确的分离,这感觉像是违反了。这是允许的吗?