Что такое event bus и почему он считается антипаттерном
Что проверяют
Умеете ли вы критиковать архитектурное решение по существу, а не по ярлыку. Сильный ответ не в том, что шина событий это плохо, а в понимании, какую связность она убирает и какую создаёт взамен, и чем её заменяют в современном Android.
Как отвечать
Event bus это глобальный посредник: отправитель публикует событие, не зная получателей, подписчики получают его по типу события. В Android так жила популярная сторонняя библиотека шины, а на уровне платформы похожую роль играют широковещательные интенты.
Выигрыш реальный: экраны, сервисы и репозитории перестают держать ссылки друг на друга. Проблема в цене. Связь никуда не делась, она исчезла из сигнатур: по коду не видно, кто публикует событие и кто на него отвечает, чтение типов заменяется поиском по проекту. Порядок доставки и число подписчиков не заданы, поэтому один и тот же экран ведёт себя по-разному в зависимости от того, что успело подписаться раньше. Липкие события доставляют старое состояние новому экрану, и получается скрытый источник истины в обход ViewModel.
Точная формулировка такая: антипаттерн не шина как приём, а глобальная шина на всё приложение. Заменяют её однонаправленным потоком: состояние экрана отдаёт StateFlow из ViewModel, одноразовые события вроде навигации или всплывающего сообщения идут через Channel или SharedFlow того же ViewModel, подписка живёт внутри repeatOnLifecycle. Область видимости сужается до экрана, зависимость снова видна в типе.
Где спотыкаются
Называют главным недостатком производительность. Стоимость доставки событий здесь ни при чём, ломаются читаемость и предсказуемость, а это обходится дороже.
Забывают про подписки и жизненный цикл. Подписка, пережившая уничтожение экрана, держит ссылку на контекст и доставляет событие в мёртвое представление, отсюда утечка памяти и падение при повороте.
Отвечают, что шина плоха всегда, и не могут назвать уместные случаи. Локальная типизированная шина внутри модуля или очередь одноразовых команд от ViewModel к экрану остаются нормальным решением.