Применение Dagger 2 в модульной архитектуре — что и как?

Здравствуйте.
Сейчас изучаю мультимодульную архитектуру с применением Clean Architecture + MVP в модулях.
Стек: Dagger 2, ReactiveIO (RxJava 2), Picasso, Cicerone, Retrofit 2, OkHttp3

Вопрос по применению Dagger 2 + Cicerone.
Каким образом они применяются (прокидывание зависимостей между модулями и старт активностей между модулями)?

В теории все понятно - взаимодействие между модулями посредством API (старт активности, к примеру, через MyActivityStarter - более ничего), а прокидывание зависимостей через зависимости компонентов в Dagger.
Но на практике не слишком получается. Что посоветуете почитать по этой теме?
  • Вопрос задан
  • 225 просмотров
Пригласить эксперта
Ответы на вопрос 1
@marmuff Автор вопроса
Итак, после копошения в документации прояснилось.
Немного не закрыт вопрос с Dagger 2, но в целом:

1) Если фича является сторонним функционалом, имеющим посредственное отношение к работе приложения - используется Dynamic Feature Module (что очень круто, т.к. можно ставить модули на лету). Dynamic Feature Module имеет свой контекст и, по своей сути, является "расширением". Можно использовать app модуль из feature, но использовать feature из app напрямую нельзя (точнее - настоятельно не рекомендуется, но теоретически возможно).

2) Если это небольшая фича, относящаяся к непосредственному функционалу - используется предпочтительно Android Library (к примеру, в Android Library можно вынести работу с сетью).

Как именно можно прокинуть классы из библиотеки в app или feature - понятно, вопрос с обратным действием (Library не имеет контекста выполнения как такового за исключением фрагментов и активностей). С подобной проблемой можно столкнуться, к примеру, реализуя в library стек а-ля Dagger 2 и Room Persistence Library, когда Room требует для билдинга контекст. Лично я решил тем, что отказался от Dagger в точке входа (т.е. инициализировал точку входа -> передал контекст и только потом подтянул Dagger) и в билдинге Instance Room. Если есть более приемлемые решения - буду благодарен. Завтра буду пробовать просто забрать app class из app module и вытащить контекст из него.

Подробная информация по Android Library: https://developer.android.com/studio/projects/andr...
Подробная информация по Dynamic Delivery: https://developer.android.com/guide/app-bundle/dyn...

ВАЖНО: ключевые инстансы рекомендую предоставлять фичам из app module, т.к. для той же Room крайне рекомендуется использовать контекст приложения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы