根据http://cre8ivethought.com/blog/2009/11/12/cqrs--la-greg-young,负责使用事件发布者发布事件的组件是存储库。
我的问题很简单:为什么会这样?
在这篇博客文章中,我们被告知:
域存储库负责发布事件,这通常在单个事务中,并将事件存储在事件存储中。
我原本期望将此作为事件存储的任务:一旦存储了一个事件(或多个事件),就会发布它。
那为什么它在存储库中呢?
答案 0 :(得分:9)
您的域模型不知道存储机制。另一方面,无论您使用事件存储,经典SQL存储还是任何其他持久性方法,它都必须确保发布相应的事件。
如果您依赖事件存储来发布事件,那么您将与存储机制紧密耦合。
答案 1 :(得分:2)
存储和发布事件必须是原子指令,因为如果其中一个操作失败,则此事件的侦听器将与事件的生产者不同步。
与从事件存储中发布事件相比,还有另一种(更昂贵的)解决方案,即使用2pc事务(两阶段提交)。
您可以在此处找到更多相互关联的信息:https://cqrs.wordpress.com/documents/building-event-storage/