为什么Symfony EventDispatcher对事件使用任意名称而不是基于类的传播?

Uri*_*iel 7 design-patterns event-dispatching symfony observer-pattern

我想在我的应用程序中实现Observer Pattern(不是php,这就是为什么不使用Symfony的组件).

虽然组件没有使用类来传播或监听事件,但我发现它很奇怪,因为这样可以使用继承来监听整个事件树.

我看不到使用基于名称的听众的单一优势,你能帮我解决一下吗?

Uda*_*dan 8

在我看来,Symfony2有利于耦合的凝聚力,这就是他们使用这种模式(Mediator模式)的原因.

来自Symfony文档:

面向对象的代码在确保代码可扩展性方面已经走了很长的路.通过创建具有明确定义的职责的类,您的代码变得更加灵活,开发人员可以使用子类扩展它们以修改其行为.但是如果他想与其他已经创建了自己的子类的开发人员分享他的更改,代码继承就不再是答案了.

考虑一下您希望为项目提供插件系统的实际示例.插件应该能够添加方法,或者在执行方法之前或之后执行某些操作,而不会干扰其他插件.使用单继承解决这个问题不是一个简单的问题,多重继承(用PHP可能)有其自身的缺点.

Symfony2 Event Dispatcher组件以简单有效的方式实现Mediator模式,使所有这些事情成为可能,并使您的项目真正可扩展.