Задать вопрос

Зачем нужны события в yii2?

Есть ли смысл использовать свои events в yii2? Не легче вызвать нужный метод оттуда где мы вешаем триггер? Элегантый код?
  • Вопрос задан
  • 3946 просмотров
Подписаться 4 Оценить Комментировать
Решения вопроса 1
MegaMufa
@MegaMufa
Событийная модель помогает строить слабосвязанную систему. Пример из жизни. Я сейчас работаю над SAAS платформой. Компания покупает учетку и выбирает за какие модули платить. Есть модули учета, проверок, для кадровиков и т.д. Модули должны взаимодействовать между собой, но любого модуля может не быть.

Например при создании сотрудника в модуле "кадррезерв", его автоматически надо добавить в модуль "учета". Я не могу напрямую дергать метод из другого модуля т.к. заранее не известно, будет он куплен или нет.

Вместо этого я бросаю событие типа user.created, а в модуле учета в обработчике этого события заношу пользователя в нужные списки. Получается, если модуля нет, то событие просто выброситься в холостую, а если есть, то запустится обработчик.

Это на самом деле очень удобно. Но есть и негативная сторона: из-за слабой связаности усложняется навигация по коду. Что бы узнать, где есть обработчики приходится пользоваться поиском по имени события. Но это малая цена за гибкость, которую дают события.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@LAV45
Эта и многие другие темы по yii2 на пальцах, и на русском языке ))
https://www.youtube.com/user/ElisDN/videos
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
К примеру, есть событие "создан пользователь".
На него вешают обработчики "отправить смс туда-то", "отправить ивэнт в какой-нибудь микс-пэнел", "подготовить какие-либо имэйлы для юзера".
Чтобы не говнокодить всё в одном месте - разделено все по логичным сервисам.
Ответ написан
bitver
@bitver
Все достаточно просто. С помощью ивентов можно дописывать функционал не затрагивает чужой код. Это добавляет гибкости в модульности.
В частности посмотрите на сторонние Behaviors, они очень ярко показывают суть вопроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы