对我来说,许多设计模式的问题似乎总是在现有代码库中实现它们的最佳方式。
代码库是PHP4,正在迁移到PHP5 OOP。然而,这是一个正在进行的过程,不太可能很快完成(用户总是需要新功能!)。
使用Mediator模式应该在哪里注册事件?
如果使用大量注册事件的脚本创建目录,则可以通过引导程序加载该目录。
//bootstrap.php
..
new \Listener\Something();
new \Listener\SomethingElse();
new \Listener\SomethingOtherThing();
或者在触发事件之前注册事件会更好,但是事件被触发但是从未注册过。
//user.php
class User {
..
function ageChange() {
new \Listener\UserAge();
..
}
..
}
或者有不同的方法吗?
答案 0 :(得分:0)
很难回答这个问题。这取决于大小写(你的情况看起来更像Observer模式)
在我看来,在触发它们之前创建观察者/侦听器/中介对象会更好。
在某些情况下,在引导应用程序中创建所有内容是件好事。但要做到这一点,请使用服务定位器模式或依赖注入模式来注入模式。对于依赖注入,我推荐使用Pimple库(http://pimple.sensiolabs.org/)。
我用PHP编写的Mediator模式示例: https://github.com/piotrmiazga/design_patterns/blob/master/src/Patterns/Mediator/Example.php