我想使用事件来传达我的服务。我将(内部)发布我所有的域事件并允许任何其他服务订阅它们。但是这种方法将这些服务结合在一起。我不再被允许更改我的事件。这甚至比本地耦合更糟糕,因为我不再了解我的消费者。这将开发/重构的能力限制在不可接受的范围内。我正在考虑对我的事件进行版本控制,以解决大多数问题。但是如何订阅版本化事件呢?引入将所有事件版本分组的通用接口,然后将侦听器中的事件向下转换为已接受的事件,这听起来并不是一个重要的解决方案。我还考虑将所有支持的事件版本发布到总线。根据定义,每个订阅者将只处理一个版本。我不希望我的域参与此事务,因此我需要构建一种基础设施侦听器,它将捕获的事件转换为其他版本。我在互联网上找不到任何关于该主题的内容,这让我不由自主地思考我是否完全错了:)
更新:经过深思熟虑,我不再想发布我的领域事件。我认为将内部服务机制暴露给外部世界是不可取的。它还可能违反某些域数据访问限制。我认为,要走的路是将我的领域事件映射到更多的corase集成事件。但我可能仍然需要对它们进行测试的方法:)
UPDATE2:经过一些咨询后,一个想法出现了。假设我们坚持集成事件的概念。此类事件可以被视为类型和事件 ID。所以外部监听器只关注事件类型。如果事件发生,那么侦听器将被提供事件 ID。这使侦听器能够从给定版本的流/总线/wtf 中获取真实事件。$eventsStore->get($eventGuid, $eventType, 'v27')
例如(PHP 语法)