Страницы

Поиск по вопросам

четверг, 27 февраля 2020 г.

Для чего нужны события и слушатели событий в Laravel на примере интернет-магазина?

#php #laravel #события


Использую laravel 5.6 для разработки интернет-магазина и как-то не приходилось пользоваться
событиями и их слушателями. Не пойму, для чего они нужны и как могут упростить разработку.
В официально документации все написано как, а почему и зачем нет информации. Если можно,
приведите на конкретном примере интернет-магазина, где там можно использовать эту фишку.
    


Ответы

Ответ 1



Если очень кратко и в двух словах, то: События и слушатели - это реализация паттерна Observer (статья на Википедии). Смысл в том, что у вас есть класс, в нем есть функции, вот вы хотите чтобы при вызове функций этого класса, вызывалась функция из другого класса - Вот собсна для чего и нужно. Функция из первого класса - будет событием (а точнее её вызов) Функция из второго класса - будет эвентом. Вы можете подумать - что мне мешает вызвать из одной функции другую, без этих слушателей. Но это будет не совсем правильно. Давайте на пальцах: Самый банальный пример: пусть у нас есть класс Users, у этого класса есть метод Auth (авторизация). Т.е. этот метод отвечает за логику-авторизации, и вызывается он только тогда когда происходит успешный вход (ввод логина и пароля). Теперь мы хотим, чтобы при входе, нам приходило письмо, что кто-то на нашем сайте вошел в систему. У нас, условно, есть класс Admin и у него метод SendMessage, который реализует данную логику. Самое первое что может прийти на ум, мы внутри метода Auth можем написать вызов класса Admin и его метода SendMessage. Но это будет не правильно, потому что в логике Auth внутри появляется сторонняя логика SendMessage (P.S. вот тут очень тонко, сложно для понимания, где логика считается раздельной, а где единой, но думаю вы понимаете). Правильней применить наш паттерн, и реализовать такую систему, где при вызове Auth вызовется наш SendMessage, не влияя на логику внутри Auth. Почему я сказал про тонкость? Дело в том, что где-то SendMessage будет являться частью логики Auth и тогда вызов внутри функции - это нормально, а где-то нет. Для визуального представления различий ситуации, давайте возьмем третий класс Logs с методом CreateLog - цель которого записывать(логировать) какие-то данные о нашем пользователе. Понятное дело что логировать надо не только Auth, а еще и вход, и выход, и регистрацию, и восстановление - а это все функции, если мы в каждой функции будем дописывать вызов нашего класса Logs и метода CreateLog - то как видите получится не совсем красиво, потом после отладки забудем где-то что-то удалить, или забудем где мы что писали, ходи по файликам и ищи. Собсна в такой ситуации с логированием, лучшего помощника, чем слушатель - не найти. Мы просто указываем какие функции нам нужны (события), и какую функцию вызывать. P.S. Это мое личное представление, может быть искажено с реальным представлением о паттерне Observer. При написании ответа ни один класс и метод не пострадал!

Ответ 2



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

Ответ 3



эффект от использования событий - когда у вас есть обработчик, который получает разные события от разных объектов и менеджерит их. выполнение действие обработчика (например отправка письма из очереди) может занимать время, поэтому позволяет делать это асинхронно от вызова.

Комментариев нет:

Отправить комментарий