Товарищи декларативщики, сорян за портянку, но тут насущный вопрос про

архитектуру и миграцию.

Кто-нибудь может поделиться опытом миграции на компоуз в реальном проекте?

Ситуация: обычный крупный проект
- десятки активити, 200+ фрагментов, одним шагом это все на компоуз не перепилить.
- Есть дизайн-система, компоуз-реализация готова где-то на 90%
- Гугловской навигации в проекте нет, рассматривает вариант втащить ее или какую-нибудь альтернативу

В целом, проект нормально попилен на фича-модули, есть немного легаси в главном модуле, но не так много.
Высокоуровнево идея следующая:
0. Каждая команда будет мигрировать сама по мере своих возможностей (ну и помогать друг другу тоже по мере возможностей)
1. Мигрировать экраны оставаясь внутри фрагментов (onCreateView -> ComposeView -> setContent, туда же передать viewModel и вперед)
2. Когда в модуле набирается несколько compose-экранов, понемногу выкидывать фрагменты и делать навигацию compose -> compose.
В этом месте как раз можно потестить разные варианты навигации и DI, но много вопросов, как оно будет работать.
- Много ли боли будет со стеком навигации?
- DI нормально будет работать?
- А может лучше все экраны в модуле, потом разом выкинуть фрагменты и перенести все в фиче-активити (А что делать, если у фичи нет своей активити? А что если фрагменты используются другими фичами?)
3. Когда пункт 2 готов, сделать то же самое, но уже на уровень выше — выкидывать активити и интегрировать имеющееся в основной модуль.

Так вот, у кого какой опыт есть? Если не хотите писать тут, буду рад обсудить в личке.

4 ответов

24 просмотра

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

Konstantin-Zolotov Автор вопроса
Turalllb Turalll
Ну проект у нас не такой большой, но ситуация похо...

Спасибо! Да, у меня гуглонавигация есть в пет-проекте, так что я более-менее в курсе как оно работает + сразу поддержка даггера есть. Кстати, Jim Sproch, топит за выпиливание VM.

Konstantin Zolotov
Спасибо! Да, у меня гуглонавигация есть в пет-прое...

Да, за выпил vm потом вникну, далеко еще мне. А Даггер долго настраивать и поддерживать, как кодеин использовал , забыл про него.

Похожие вопросы

Обсуждают сегодня

Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
А в каком формате фреймы? Сам формат сейчас придумываешь, или что-то готовое нужно распарсить?
Okhsunrog
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Карта сайта