7

我正在尋找實施Observer模式到我的應用程序(不是PHP,這就是爲什麼不使用Symfony的組件)。爲什麼Symfony EventDispatcher使用任意名稱來代替基於類的傳播?

雖然該組件並未使用類來傳播或偵聽事件,但我發現它很奇怪,因爲它允許使用繼承來監聽整個事件樹。

我看不到使用基於名稱的偵聽器的單一優勢,您是否可以幫助我進行思考?

回答

8

Symfony2,在我看來,贊成凝聚力超過耦合,這就是爲什麼他們使用這種模式(Mediator pattern)。

Symfony docs

反對面向代碼已經走了很長的路要走,以確保代碼 可擴展性。通過創建具有良好定義的職責的類,您的代碼變得更加靈活,開發人員可以使用子類擴展它們以修改其行爲。但是,如果他想讓 與其他開發人員分享他的更改,這些開發人員也創建了自己的子類,則代碼繼承不再是答案。

考慮 真實世界的例子,你想爲你的 項目提供一個插件系統。插件應該能夠添加方法,或者在執行方法之前或之後執行某些操作,而不會干擾其他 插件。這不是一個容易解決的問題,單一繼承, 和多重繼承(是否可能與PHP)有其自身的 的缺點。

Symfony2 Event Dispatcher組件以一種簡單有效的方式實現了 調解器模式,使所有這些事情成爲可能,並使您的項目真正具有可擴展性。

相關問題