gpt4 book ai didi

php - Symfony2 中的设计模式 : is EventDispatcher a Mediator or Event Aggregator?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:28 24 4
gpt4 key购买 nike

来自 Symfony2 的 EventDispatcher 组件文档:

The Symfony2 EventDispatcher component implements the Mediator pattern in a simple and effective way to make all these things possible and to make your projects truly extensible.

我一直在阅读 Event Aggregator和中介者模式及其 differences .在我看来,Event Aggregator 是 Mediator 的一个特例,它使用事件来促进通信,并且内部没有任何业务逻辑。另一方面,调解器更通用,可以让一些业务逻辑决定是否应该通过某些通信。

于是我查看了Symfony2的EventDispatcher或TraceableEventDispatcher的源码,发现唯一可能改变通信的逻辑是检查事件传播是否已经停止,如下:

protected function doDispatch($listeners, $eventName, Event $event)
{
foreach ($listeners as $listener) {
call_user_func($listener, $event, $eventName, $this);
if ($event->isPropagationStopped()) {
break;
}
}
}

这就是为什么 Symfony2 中的 EventDispatcher 实现了 Mediator 模式而不是 Event Aggregator 模式?如果检查 isPropagationStopped 的逻辑从 EventDispatcher 中移出(例如,移到事件监听器中),那么这将实现 Event Aggregator?

最佳答案

Event Aggregator 类似于 Observer 模式,Subject 只是通知 Observer 对象有变化,无论是什么类型的事件都需要更新。

Symfony2 的 EventDispatcher 实现了 Mediator 模式,因为它就像一个路由器,决定什么事件将由可以订阅多个事件的监听器触发。如您所见,即使删除了 isPropagationStopped 部分,EventDispatcher 仍然需要事件名称来确定触发哪个事件。

安东尼费拉拉有一个伟大的 blog post讨论这个问题

关于php - Symfony2 中的设计模式 : is EventDispatcher a Mediator or Event Aggregator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21641300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com