Комментарии 6
Вся проблема навигации выдумана. И во вводном тексте вы совершенно меня не убедили.
Вместо нормальной навигации между разными активитями постоянно кто-то пытается придумать дурацкие вещи, а потом писать для них костыли.
Плюс, пример открытия CheckoutActivity тоже не имеет ничего общего с реальностью, потому что обычно надо собрать с предыдущего шага информацию и передать её в чекаут. В примере с ридером новостей то же самое — надо передавать номер статьи, и намного меньше будет проблем при открытии статьи в отдельной активити.
Зачем изначально направлять себе в ноги стволы со всех сторон?
Вместо нормальной навигации между разными активитями постоянно кто-то пытается придумать дурацкие вещи, а потом писать для них костыли.
Плюс, пример открытия CheckoutActivity тоже не имеет ничего общего с реальностью, потому что обычно надо собрать с предыдущего шага информацию и передать её в чекаут. В примере с ридером новостей то же самое — надо передавать номер статьи, и намного меньше будет проблем при открытии статьи в отдельной активити.
Зачем изначально направлять себе в ноги стволы со всех сторон?
Ну нет у вас такой потребности, но зачем так категорично? Слой навигации — полезная вещь, сами используем похожее, правда, в iOS.
На мой взгляд, такой подход имеет право на жизнь, если каждый экран выделен в изолированный модуль и ничего не знает об окружающих его экранах. Он только определяет ряд событий, о которых сообщает координатору. Реализация координатора в свою очередь лежит в модуле приложения, который уже связывает экраны друг с другом и определяет когда, куда переходить.
Незадолго до прочтения оригинала я столкнулся с задачей по вынесению отдельных экранов в библиотечный модуль и тут оказалось, что активити жестко завязаны друг на друга и нельзя просто взять и перенести. В итоге пришел к первому варианту (когда из активити вызываем навигатор/intent factory)
Также в статье явно указано, что для небольших проектов координатор/навигатор может стать абстракцией ради абстракций.
Также в статье явно указано, что для небольших проектов координатор/навигатор может стать абстракцией ради абстракций.
Вот так и рождаются настоящие паттерны — в настоящем энтерпрайз приложении. Читая статью испытал небольшое дежавю — мы используем у себя похожий подход, только мы назвали его Starter (стартует экраны и фрагменты). Особый упор, конечно, на реализацию логики возвращений (иногда возвращатсья надо не туда, откуда пришёл — например, пропуская экарн EULA) и передачи данных между экранами.
Как только вы решите написать полноценный многомодульный проект, то столкнётесь с проблемой, когда у вас две активити лежат в разных модулях и не видят друг друга. Вот тут то без внешней сущности типа навигатора не обойтись.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Навигация в Android-приложении с помощью координаторов