7

我希望在我的应用程序中实现观察者模式(不是 php,这就是为什么不使用 Symfony 的组件)。

尽管组件没有使用类来传播或侦听事件,但我发现这很奇怪,因为这将允许使用继承侦听整个事件树。

我看不到使用基于名称的侦听器的单一优势,您能帮我思考一下吗?

4

1 回答 1

8

在我看来,Symfony2 更倾向于内聚而不是耦合,这就是他们使用这种模式(中介模式)的原因。

来自Symfony 文档

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

考虑一个真实的例子,你想为你的项目提供一个插件系统。插件应该能够添加方法,或者在方法执行之前或之后做一些事情,而不会干扰其他插件。这不是一个用单继承容易解决的问题,而多继承(如果 PHP 可能的话)有其自身的缺点。

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

于 2013-10-24T18:30:23.250 回答