Я обсуждал систему событий Laravel с другим разработчиком сегодня. Он упомянул, что диспетчер событий Laravel использует шаблон наблюдателя.Laravel 5 Event - Является ли это посредником или наблюдателем?
Я всегда думал, что он реализовал шаблон посредника, так как ваши объекты всегда прослушивают события/события пожара через объект диспетчера событий, но документ говорит, что он является наблюдателем.
Event::listen('event.name', function ($foo, $bar) {
//
});
Event::fire("event.name", []);
Разве это не образец медиатора?
@ floopy12 Но разве вы не получаете экземпляр объекта, а затем слушаете его, если он является наблюдателем? В этом случае вы слушаете класс Event, а не объект, который вас интересует. Наличие прослушивания/огня не означает, что он является наблюдателем. Посредник может также слушать/стрелять. – Moon
@Moon На мой взгляд, единственное, что имеет значение, это то, что вы слушаете что-то еще, даже если это не «объект», это значит, что вас как-то интересует. Шаблон Observer (или любой) не принадлежит ни одному языка или парадигмы, это концептуальная идея выразить проблему и решение. Реализация должна быть адаптирована к вашим конкретным потребностям. Здесь он кажется более «функциональным», когда вы слушаете событие и ассоциируете обратный вызов с ним, чем классическая реализация ООП. – floppy12
@ floopy12 // Что я понимаю полностью. Проблема заключается в том, что эта имплантация также подразумевает несколько несложную компиляцию, поскольку имя события может быть чем угодно, а Event выступает в роли посредника независимо от того, слушаю ли я какое-то конкретное событие или нет. Я думаю, именно поэтому некоторые из фреймворков PHP называют его посредником, но Laravel этого не делает. – Moon