2016-02-15 8 views
1

Я обсуждал систему событий Laravel с другим разработчиком сегодня. Он упомянул, что диспетчер событий Laravel использует шаблон наблюдателя.Laravel 5 Event - Является ли это посредником или наблюдателем?

Я всегда думал, что он реализовал шаблон посредника, так как ваши объекты всегда прослушивают события/события пожара через объект диспетчера событий, но документ говорит, что он является наблюдателем.

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

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

Разве это не образец медиатора?

ответ

2

У меня нет четкого представления о том, что конкретно делает Laravel, и на самом деле, если документ говорит, что он построен на шаблоне наблюдателя, я бы поверил в это.

Однако ваш вопрос о том, что код выглядит и из моего опыта, я могу легко распознать наблюдателя здесь с аналогией:

  • слушать будет похож на наблюдателя подписаться/присоединять
  • огонь будет похож на наблюдателя уведомит/обновить

Посредник мне кажется странным, потому что, хотя цель состоит в том, чтобы облегчить общение между некоторыми объектами, я не вижу в этом хорошего способа распространения уведомлений. По этой причине я определенно поставил бы на наблюдателя.

+0

@ floopy12 Но разве вы не получаете экземпляр объекта, а затем слушаете его, если он является наблюдателем? В этом случае вы слушаете класс Event, а не объект, который вас интересует. Наличие прослушивания/огня не означает, что он является наблюдателем. Посредник может также слушать/стрелять. – Moon

+0

@Moon На мой взгляд, единственное, что имеет значение, это то, что вы слушаете что-то еще, даже если это не «объект», это значит, что вас как-то интересует. Шаблон Observer (или любой) не принадлежит ни одному языка или парадигмы, это концептуальная идея выразить проблему и решение. Реализация должна быть адаптирована к вашим конкретным потребностям. Здесь он кажется более «функциональным», когда вы слушаете событие и ассоциируете обратный вызов с ним, чем классическая реализация ООП. – floppy12

+0

@ floopy12 // Что я понимаю полностью. Проблема заключается в том, что эта имплантация также подразумевает несколько несложную компиляцию, поскольку имя события может быть чем угодно, а Event выступает в роли посредника независимо от того, слушаю ли я какое-то конкретное событие или нет. Я думаю, именно поэтому некоторые из фреймворков PHP называют его посредником, но Laravel этого не делает. – Moon

 Смежные вопросы

  • Нет связанных вопросов^_^