Ответ вслух Middle Навигация, координаторы и deep links спрашивают часто обновлено

Навигация в мобильном приложении: координаторы и роутеры

Вопрос

Как вы организуете навигацию в приложении и почему не внутри экранов?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Экраны у меня не знают друг о друге: экран списка сообщает «выбран товар 42», а куда идти дальше, решает координатор (или роутер). Это позволяет переиспользовать экран в разных потоках и тестировать переходы отдельно.

Что должно прозвучать в ответе

  • Экраны не знают о соседях, сообщают о событиях

  • Координатор или роутер собирает экраны и делает переходы

  • Иерархия координаторов по потокам, удаление дочерних при завершении

  • Навигация как состояние в декларативных UI

  • Deep links разбираются в маршруты в одном месте

  • Тестируемость переходов

Что могут спросить следом

  • Как координатор узнаёт, что пользователь ушёл свайпом назад?
  • Как передать результат с дочернего экрана родителю?

Разбор

Экраны у меня не знают друг о друге: экран списка сообщает «выбран товар 42», а куда идти дальше, решает координатор (или роутер). Это позволяет переиспользовать экран в разных потоках и тестировать переходы отдельно. Координаторы образуют дерево по потокам: приложение, авторизация, основной поток, оформление заказа. Дочерний сообщает родителю о завершении, и тот его удаляет. Отдельно ловлю системный «назад» и закрытие свайпом, иначе дочерние координаторы утекают. В SwiftUI и Compose навигация естественно становится состоянием: массив маршрутов, который меняет роутер. Deep links парсятся в те же маршруты в одном месте, поэтому ссылка и нажатие кнопки ведут по одному коду.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме