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