Size: a a a

Android Architecture

2020 August 27

SO

Sergey Opivalov in Android Architecture
Мы то так и делаем, но мы и не бьем фичу на два модуля (на это есть свои причины, мягко говоря)
Вопрос твой понял. Но не обязательно ведь даггеровкие компоненты/модуи описывать в фичевых модулях (описывать там их хорошо для изоляции, это да, но пока в голову не приходит воркэраунда другого)
Если например, в  :app весь вайринг зависимостей происходит. Сразу подумал про скоупы - но тут он возможны, потому что аннотацию скоупа ты будешь описывать в api модуле своей фичи, а о нем твой app знает. Все твои фичевые даггер модули описываются тут.
Если :B хочет использовать зависимость(интерфейс) из :A, то ему достаточно подключить :A:api. А реализацию ему спустит сверху app, который про всех знает
источник

I

Igor in Android Architecture
Ребят, в проекте (клин/moxy/dagger) юзаем роутеры, но тк в них зависимость на сторонние активити/фрагменты - НЕ удается их хранить внутри самих фич (храним в app модуле).
Еще из-за зависимости на экземпляр франмента/активити - не удается прокинуть через dagger

Короче сплошные костыли( есть способ, как это пофиксить?
источник

KD

Konstantin Dovnar in Android Architecture
Igor
Ребят, в проекте (клин/moxy/dagger) юзаем роутеры, но тк в них зависимость на сторонние активити/фрагменты - НЕ удается их хранить внутри самих фич (храним в app модуле).
Еще из-за зависимости на экземпляр франмента/активити - не удается прокинуть через dagger

Короче сплошные костыли( есть способ, как это пофиксить?
Можно заменить один костыль на другой и встащить Navigation Component.

Он позволяет производить навигацию не по конкретной реализации, а по ID.
источник

KD

Konstantin Dovnar in Android Architecture
Либо накрутить вокруг своего роутера подобную абстракцию
источник

Kd

Konstantin dmz9 in Android Architecture
выделить интерфейс iRouter и сделать переходы по каким нибудь Route-объектам, с необходимыми данными внутри.
при запуске экрана активити/фрагмент предоставляет роутер (от себя).
если на конкретном экране не нужен какой то специфичный роутинг - отдается роутер "предка" (вышестоящего фрагмента или активити), если нужен - можно декорировать роутер предка - своим, так что сначала будет обрабатываться "местная" логика а потом уже "остальная"
источник

Kd

Konstantin dmz9 in Android Architecture
в идеальном случае роутер будет реализацией от активити, но никто об этом не узнает т.к. у всех только интерфейс и как конкретно ходить по экранам знает только единственная реализация (в апп модуле)
источник

I

Igor in Android Architecture
У меня была идея завести под каждый роутер - фабрику, которую и инъектить в презенты.
Потом по месту кидать в эту фабрику текущую активити/fragmentmanager.

Но главная и нерешаемвая проблема - как прокинуть это в даггер, если реализацией лежит в другом (app) модуле, на который нет ссылки?
источник

I

Igor in Android Architecture
Konstantin dmz9
выделить интерфейс iRouter и сделать переходы по каким нибудь Route-объектам, с необходимыми данными внутри.
при запуске экрана активити/фрагмент предоставляет роутер (от себя).
если на конкретном экране не нужен какой то специфичный роутинг - отдается роутер "предка" (вышестоящего фрагмента или активити), если нужен - можно декорировать роутер предка - своим, так что сначала будет обрабатываться "местная" логика а потом уже "остальная"
А как это в dagger прокинуть, что бы по красоте в конструктор презентера инъектить?
Особенно если нужно нивелировать из FeatureModuleA в FeatureModuleB, между которым нет ссылок.
источник

Kd

Konstantin dmz9 in Android Architecture
есть @Named для множественных рализаций, даггером давно не юзал
источник

Kd

Konstantin dmz9 in Android Architecture
с койном у меня примерно так
источник

Kd

Konstantin dmz9 in Android Architecture
источник

I

Igor in Android Architecture
Кстати, а почему I router?
источник

Kd

Konstantin dmz9 in Android Architecture
соглашения для себя самого чтобы отличать интерфейсы, которое многими считается плохим неймингом
источник

E

Eugene in Android Architecture
а можно Router и RouterImpl
источник

D

Donald in Android Architecture
тоже не люблю Impl
источник

D

Donald in Android Architecture
проще для интерфейса префикс I
источник

I

Igor in Android Architecture
А можно Router и AuthFlowRouter) (это я про конкретный пример)
источник

AC

Arsen CeH9 in Android Architecture
а мне наоборот, больше нравится Example + ExmapleImpl, все-таки интерфейс - публичная часть и она видна наружу, а вот Impl только в месте реализации
источник

Kd

Konstantin dmz9 in Android Architecture
Eugene
а можно Router и RouterImpl
у меня в проекте 7 реализаций, нейминг спам *Impl мне не зашел )))
источник

KD

Konstantin Dovnar in Android Architecture
IRouterImpl
источник