從Symfony2中的此事件的組件文檔:Symfony2中的設計模式:EventDispatcher是介體還是事件聚合器?
的Symfony2的此事件組件實現簡單而有效的方法Mediator模式,使所有這些東西可能,使您的項目真正可擴展。
我一直在閱讀約Event Aggregator和調解員模式及其differences。對我來說,它看起來像Event Aggregator是Mediator的一個特例,它使用事件來促進溝通,並且沒有任何業務邏輯。另一方面,調解人是更通用的,並且可以允許一些業務邏輯來決定是否應該通過某種通信。
所以我檢查Symfony2中的此事件或TraceableEventDispatcher的源代碼,並發現,如果事件傳播已停止可能改變通信的唯一邏輯檢查,如下:
protected function doDispatch($listeners, $eventName, Event $event)
{
foreach ($listeners as $listener) {
call_user_func($listener, $event, $eventName, $this);
if ($event->isPropagationStopped()) {
break;
}
}
}
這是爲什麼此事件中Symfony2實現中介模式,但不是事件聚合模式?如果要檢查isPropagationStopped
的邏輯是否已從EventDispatcher(即向事件偵聽器)移出,那麼這將實現Event Aggregator?
作爲本次活動唯一的聚合「已經知道」如何轉發一個事件,您的假設聽起來是正確的:唯一的區別是關於*,其中*業務邏輯 – DonCallisto