Я видел много людей, говорящих, что Symfony2, Zend Framework 2 и другие управляются событиями.
В настольном мире по программированию, основанному на событиях, я понимаю, что приложение будет уведомлять своих наблюдателей всякий раз, когда изменяется его состояние.
Так как PHP-приложения не имеют никакого отношения к этому, нет никакого способа сделать такую вещь. И.Е. Наблюдатели привязаны к просмотру, наблюдая изменения, когда пользователь использует интерфейс. Вместо этого для обновления представления требуется новый процесс запроса. Итак, это не событие, а целый новый запрос.
С другой стороны, существует аналогичная концепция: управляемая событиями архитектура.
Здесь вы можете прочитать оба:
http://en.wikipedia.org/wiki/Event-driven_programming
http://en.wikipedia.org/wiki/Event-driven_architecture
И вот другой:
http://en.wikipedia.org/wiki/Signal_programming
Сигнал - это уведомление о том, что событие произошло. Сигналы иногда описываются как программные прерывания. Сигналы аналогичные аппаратным прерываниям в том, что они прерывают нормальный ход выполнения программы; в большинстве случаев невозможно точно предсказать, когда поступит сигнал.
- Описание тэга Stackoverflow [singals]
Кроме того, то, что я использовал для вызова event-driven, похоже, больше связано с шаблоном Signals and Slots, представленным Qt (реализация шаблона наблюдателя)
В качестве примера, существует Prado Framework, который утверждает, что управляется событиями:
http://www.pradosoft.com/demos/quickstart/?page=Fundamentals.Applications (раздел Application Lifecycles)
http://www.pradosoft.com/docs/manual/System/TApplication.html#methodonEndRequest
IIRC, это не приложение, управляемое событиями, а вместо этого просто плагины (сигналы и слоты), используемые классами, реализующими observable Interface
. Я имею в виду, учитывая, как настольные приложения используют события и как приложения без учета состояния используют события (как плагины): первые используют события для всего приложения, включая представления, последние только для операций на стороне сервера.
Один из них больше связан с аспектно-ориентированным программированием (с сигналами и слотами), а другой не привязан к сквозным проблемам/AOP. Другими словами, это больше связано с состоянием приложения.
Итак, какова на самом деле связь между этими терминами и как они отличаются друг от друга?
- Программирование, управляемое событиями
- Архитектура, управляемая событиями
- Шаблоны сигналов и слотов
Являются ли эти термины просто универсальными шаблонами? Следовательно, все, что реализует шаблон наблюдателя, можно считать управляемым событиями?
UPDATE
Zend Framework 2
Статья об АОП, которую я связал выше (http://mwop.net/blog/251-Aspects,-Filters,-and-Signals,-Oh,-My!.html) был написан Мэтью Вейером О'Финни (ZF Leader). IIRC, это не упоминают о "управляемом событиями", просто сигнале и слотах.
Symfony 2
В описании компонента Symfony2
EventDispatcher
нет упоминаний о для приложений, управляемых событиями: http://symfony.com/doc/current/components/event_dispatcher/introduction.htmlОн содержит только ссылки на "События" (которые, собственно, обрабатываются сигналом и слотами).
Оба фреймворка, по-видимому, используют шаблон перехвата фильтра в сигнальном и слоте для обработки синхронных событий во время процесса запроса.