Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5事件-这是调解人还是观察者?_Php_Design Patterns_Laravel 5_Observers_Mediator - Fatal编程技术网

Php Laravel 5事件-这是调解人还是观察者?

Php Laravel 5事件-这是调解人还是观察者?,php,design-patterns,laravel-5,observers,mediator,Php,Design Patterns,Laravel 5,Observers,Mediator,今天我和另一个开发者讨论了Laravel的事件系统。他提到,Laravel的事件调度器使用观察者模式 我一直认为它实现了一个中介模式,因为您的对象总是通过事件调度器对象侦听/触发事件,但文档说它是一个观察者 Event::listen('event.name', function ($foo, $bar) { // }); Event::fire("event.name", []); 这不是一种中介模式吗?我不知道拉威尔具体做了什么,事实上,如果医生说它是建立在观察者模式上的,我会相

今天我和另一个开发者讨论了Laravel的事件系统。他提到,Laravel的事件调度器使用观察者模式

我一直认为它实现了一个中介模式,因为您的对象总是通过事件调度器对象侦听/触发事件,但文档说它是一个观察者

Event::listen('event.name', function ($foo, $bar) {
    //
});

Event::fire("event.name", []);

这不是一种中介模式吗?

我不知道拉威尔具体做了什么,事实上,如果医生说它是建立在观察者模式上的,我会相信

然而,您的问题是关于代码是什么样子的,根据我的经验,我可以很容易地在这里通过类比认出一个观察者:

  • 收听类似于观察者的订阅/附加
  • 开火类似于观察者的通知/更新

在这里,中介对我来说似乎很奇怪,因为即使其目的是促进某些对象之间的通信,我也不认为它是分发通知的好方法。出于这个原因,我肯定会把赌注押在观测者身上。

@floopy12但你不是得到了一个对象的实例,然后如果它是观测者,就听它的声音吗?在本例中,您正在侦听一个事件类,而不是您感兴趣的对象。倾听/开火并不意味着它是一个观察者。调解人也可以听/火。@Moon在我看来,唯一重要的是你在听别的东西,即使它不是一个“对象”,这意味着你在某种程度上对它感兴趣。观察者模式(或任何模式)不属于任何语言或范式,它是表达问题和解决方案的概念性想法。应该根据您的具体需要调整实现。在这里,它似乎更像是一种“函数式”方法,您可以侦听事件并将回调与之关联,而不是传统的OOPimplementation@floopy12//我完全理解。问题是,这种植入还意味着某种程度上的松散编译,因为事件名称可以是任何名称,并且无论我是否在侦听特定事件,事件都充当中介。我认为这就是为什么一些PHP框架称它为中介,但Laravel不这么做的原因。@Moon:关于松耦合的问题,在中介和观察者中,objA和objB都不直接通信(分别通过中介或“事件”进行通信,即使它是从可观察对象触发的)。提供的代码不足以知道Laravel在引擎盖下实际做了什么。然而,假设中介促进了其他两个(或更多)对象之间的通信,那么如果事件代表中介,那么这里的“两个主题”在哪里呢?此外,事件是否是调解人的正确名称?(考虑到这是一个可观察的名称)@floopy12//不反对,但也不同意。就我对GOF书的理解而言,观察家之间确实是相互依赖的。你需要听一个主题的实例。我知道植入会改变,但我真的不认为意图应该改变。在这种特殊情况下,实际上没有人相互依赖。这只是程序员的想法。我想我在这里问了一个错误的问题,因为这里不会有一个具体的答案,而是好的意见。我欣赏你的想法。