Mediator模式何时注册事件

时间:2014-04-15 11:45:05

标签: php events mediator

对我来说,许多设计模式的问题似乎总是在现有代码库中实现它们的最佳方式。

代码库是PHP4,正在迁移到PHP5 OOP。然而,这是一个正在进行的过程,不太可能很快完成(用户总是需要新功能!)。

使用Mediator模式应该在哪里注册事件?

如果使用大量注册事件的脚本创建目录,则可以通过引导程序加载该目录。

//bootstrap.php
..
new \Listener\Something();
new \Listener\SomethingElse();
new \Listener\SomethingOtherThing();

或者在触发事件之前注册事件会更好,但是事件被触发但是从未注册过。

//user.php
class User {
    ..
    function ageChange() {
        new \Listener\UserAge();
        ..
    }
    ..
}

或者有不同的方法吗?

1 个答案:

答案 0 :(得分:0)

很难回答这个问题。这取决于大小写(你的情况看起来更像Observer模式)

在我看来,在触发它们之前创建观察者/侦听器/中介对象会更好。

  1. 你没有用很多类填充全局域名空间
  2. 你不要浪费记忆来储存最终可能无法使用的物品
  3. 你不要浪费cpu去创造很多课程。
  4. 很容易修改代码行为并传递/创建不同的类。当所有内容都在bootstrap中创建时,你必须坚持使用该集
  5. 在某些情况下,在引导应用程序中创建所有内容是件好事。但要做到这一点,请使用服务定位器模式或依赖注入模式来注入模式。对于依赖注入,我推荐使用Pimple库(http://pimple.sensiolabs.org/)。

    我用PHP编写的Mediator模式示例: https://github.com/piotrmiazga/design_patterns/blob/master/src/Patterns/Mediator/Example.php