События часто вносят путаницу, так как добавляют невидимые связи в коде. Логику выполнения кода и все побочные эффекты становится сложно отследить. Поэтому, их используют редко.
Самый частый пример использования событий - это привязка к событиям внешних компонентов.
Сделал некий разработчик свой универсальный компонент, и не знает, как его компонент будет использоваться. Хочется и предоставить возможность расширенного использования, и при этом не сильно менять логику.
Поэтому автор компонента прописывает генерацию события, допустим "Письмо отправлено". Мы, подключив этот компонент, в приложении "ловим" событие и увеличиваем какой-нибудь счётчик или пишем в лог. Или не подписываемся на событие и игнорируем его.
Концепция очень простая, поэтому кое-где используется )
Но в коде самого приложения я не вижу причин делать связь через события...
Ну ююишные эвенты может и не самые удобные. Но утверждение, что эвенты используются редко спорное.
Когда при добавлении товара например тебе нужно переиндексить товар в эластике, сгенерить превьюхи, зафиксировать какой пользователь создал или изменил товар, при изменении количества товара в наличии еще произвести манипуляции и прочая прочая логика. Ты будешь это все в сервисе писать? 5 раз пушить в очередь и делать 5 джобов?)) Написать свой диспатчер в простом виде и эвенты это дело 20 минут.