Тёмный

Dagger 2 в многомодульном Android проекте 

Android Broadcast. Все об Андроид разработке
Просмотров 17 тыс.
50% 1

Демонстрация организации Dagger Component и связей между ними в многомодульном Android проекте
💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon / android_broadcast
🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
🔗 Документация по Dagger dagger.dev/dev-guide/
📺 Курс по Dagger 2 clck.ru/VtY7d
🔗 Код из видео clck.ru/YRpyC
Видео сделано при поддержке Лаборатории Касперского
#AndroidBroadcast #DaggerКурс #Dagger2 #DI #DependncyInjection #Hilt #DaggerHilt #КириллРозов #РозовКирилл #mutibinding #component #subcomponent #модуляризация
0:00 Вступление
1:00 Что из Dagger будем использовать
1:42 Правила модуляризация проекта
3:08 Структура модулей в проекте
5:26 Component в модулях
7:41 Организация компонентов в модулях
10:31 Хранение Component feature модуля
13:09 Инициализация зависимостей feature component
14:31 Inject в feature модуле
15:03 Dagger + модуляризация != сложно
15:45 Заключение

Опубликовано:

 

28 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 60   
@AndroidBroadcast
@AndroidBroadcast 2 года назад
🔗 Код из видео clck.ru/YRpyC 💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
@user-not_defined
@user-not_defined 2 года назад
В целом довольно интересно, но что если в проекте Мокси + Dagger + Navigation Component + Многомодульность + Clean Arhitecture хотелось бы посмотреть как можно сделать красиво, + настроить модули внутри модулей транзитивно, чтобы постоянно implementation не писать от одних и тех же библиотек в разных фиче модулях к примеру
@kafychannel
@kafychannel 2 года назад
Спасибо,Кирилл,очень полезные видео !
@alexkovalchuk3540
@alexkovalchuk3540 2 года назад
большое спасибо, очень доступно. Футболки - супер :)
@user-fd5tc4nx3d
@user-fd5tc4nx3d 2 года назад
Ура-а-а! Спасибо большое!
@alekseyblekot119
@alekseyblekot119 2 года назад
Супер! Спасибо большое) действительно не сложно) Ещё классно, у вас в видео все время какие-то Котлин-плюшки вижу - типа by notNull() =)
@user-ed6ps4ol9n
@user-ed6ps4ol9n 2 года назад
Наконецто!!!
@Ashimoro
@Ashimoro 2 года назад
Спасибо! Интересно было бы послушать про клин архитектуру, и как она дружит с даггером
@deadchannal
@deadchannal 2 года назад
Крутоь!
@user-xb3cj4th5e
@user-xb3cj4th5e 2 года назад
спасибо
@user-eo5vg3ku4u
@user-eo5vg3ku4u 2 года назад
супер
@quverr
@quverr 2 года назад
Думаю многие уже заждались этого выпуска :)
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Да, скоро будет больше
@Mazaxict11
@Mazaxict11 2 года назад
Показалось маловато, прошёлся по верхам. Хотелось бы увидеть более глубокий разбор. Динамическое создание фичамодулей в реалтайме. Связи между двумя фичамодулями.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Я связь между фичамодулями не делаю, так как это усложняет архитектуру
@yuriyderkach9215
@yuriyderkach9215 2 года назад
Супер!!! Отдельное спасибо за ссылку на гитхаб) Огромная просьба не затягивайте с уроком про hilt, интересно послушать ваше мнение. На сколько я знаю hilt не саппортит динамик фичерс, было бы интересно послушать обо всем что он не умеет в отличии от даггера, чтоб не нарваться на неприятный нежданчик во время разработки)
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Он умеет все то же что и Dagger просто удобнее и больше генерирует кода, что упрощает интеграцию с Jetpack библиотеками
@user-vp8dn7ie9z
@user-vp8dn7ie9z 11 месяцев назад
​@@AndroidBroadcastзначит лучше юзать Hilt?
@qrampus9707
@qrampus9707 2 года назад
Спасибо за выпуск. Если у нас будет много фича-модулей и мы будем для каждого модуля предоставлять зависимости, имплементируя интерфейсы, не разрастётся ли наш основной компонент до огромных размеров?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Необязательно их должен основной компонент реализовывать. Это может кто угодно делать
@kulbabus
@kulbabus 11 месяцев назад
Для чего компонент фичи во вью модель класть, если его единственная зависимость в синглтоне хранится? Может есть решение как зависимость не в синглтоне хранить и ограничить жизненным циклом фичи?
@ivanchepelkin6347
@ivanchepelkin6347 2 года назад
Отличное решение хранить компоненты во вьюмодели!вопрос : как расшарить компоненты из вюмодели, чтоб можно было их видеть из любой точки приложения?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Можно сделать вот так gist.github.com/kirich1409/3fb3371703b8ed3b9d019f1b00625bca
@buddaset4226
@buddaset4226 Год назад
13:05: упоминаются другие подходы реализации интерфейса Provider( отличные от синглтона) . А можно пример привести?
@AndroidBroadcast
@AndroidBroadcast Год назад
Нет, но это будет простой объект с каким-то временем существования и он должен заниматься в какой-то момент
@_Killana_
@_Killana_ 2 года назад
Кирилл, привет. Скажи, пожалуйста, а как реализовать такое: Нужно получить @inject класса из модуля Б, в модуль А. Если модуль Б это сабкомпонент модуля А.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Доставить зависимость из сабкомпонент в комплект нельзя. Если сталкивается с тако задачей, то вы неправильно сделали архитектуру графа. Модули не могут доставлять зависимости, а уже тем более быть компонентами! Не путайте терминологию
@user-zg3yu9xy6l
@user-zg3yu9xy6l 2 года назад
Интересует, каким образом фича будет вызывать другую фичу, если фичемодули не должны знать друг о друге. Тот же NewsList должен открывать NewsDetails. В видео и в коде этот момент не описан
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Это не тема этого видео, но будет показано в отдельном
@AntonParonko
@AntonParonko 2 года назад
Можешь сделать api модули для каждого фича модуля. Там будут реквесты и резалты для работы с конкретным модулем.
@nazirjonm6560
@nazirjonm6560 2 года назад
Спасибо большое, каким образом фича будет вызывать другую фичу, если я использую NewsDetails нескольким страницам. Для каждого viewmodel fragment/activity NewsDetails надо реализовать? Как будет этого правильно реализовать?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Я создаю в каждой фиче интерфейс с необходимым функционалом. Например, фича "news_list" будет иметь специальный интерфейс для навигации в детали, который должен будет предоставлен в зависимостях ArticlesComponent. app модуль знает все модули и сможет реализовать этот навигатор и перенаправлять в нужное русло При шаринге данных нужно все делать через слой данных
@bolnoi8
@bolnoi8 11 месяцев назад
Это что же, мы в фича модуле создаем синглтон хранилище, в которое Application пишет записывает свой компонент? Не считается ли это за утечку? Буквально не утечет конечно, компонент должен прожить столько же, сколько и процесс, но если пользователь на этот экран не собирается идти, то мы получаем ненужный указатель в памяти.
@Sk-gb2hx
@Sk-gb2hx 2 года назад
+
@user-ed6ps4ol9n
@user-ed6ps4ol9n 2 года назад
Есть очень хорошый цикл статей про многомодульность на хабре. От Лаборатории Касперского. Там тоже очень хорошие материалы. Но насколько я понимаю, концептуально вся "магия" для провайда зависиместей для фичи делается в основном руками.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Верно. Каждый выбирает свой подход и универсального решения нет
@user-ed6ps4ol9n
@user-ed6ps4ol9n 2 года назад
Больше абстракций - больше свободы принятия решений)
@alekseyblekot119
@alekseyblekot119 2 года назад
Дайте ссылочку на хабр, плиз)
@user-ed6ps4ol9n
@user-ed6ps4ol9n 2 года назад
@@alekseyblekot119 щас приеду в прекрасный пустой утренний офис и скину ссылочку)
@AndroidBroadcast
@AndroidBroadcast 2 года назад
А погуглить в хабе Лаборатории Касперского? Не ленитесь!
@agp1444
@agp1444 2 года назад
ссылка на код из видео не открывается :-( пишет "Your connection is not private" и не пускает. это я что-то неправильно делаю?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Наверное ссылка пытается в http открываться
@user-gc4wb2wb7c
@user-gc4wb2wb7c 2 года назад
Возможно это глупый вопрос, но я не понял одного, почему при повороте экрана ArticlesFragment, стейт вьюмодельки не сохраняется и он опять билдит компонент
@AndroidBroadcast
@AndroidBroadcast 2 года назад
ViewModel (при правильном использовании) не будет пересоздаваться, поэтому там и хранится компонент. Возможно оговорка в ролике. Скиньте таймкод про какой момент говорите, пожалуйста
@user-gc4wb2wb7c
@user-gc4wb2wb7c 2 года назад
​@@AndroidBroadcast я скачал ваш код из репозитория, и поставил одну точку для дебага в ArticlesComponentViewModel (время на видео 12:02), а вторую в ArticlesFragment(время на видео 15:03)в методе onAttach на ViewModelProvider, и попробовал повернуть экран для изменения состояния, и при каждом повороте экрана я дебагом заходим в ArticlesComponentViewModel и в метод onAttach в ArticlesFragment, получается что компонент каждый раз пересоздавался в ArticlesComponentViewModel?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Нет, он получается. Там же нет вызова создания объекта. Обратите внимание на ссылку на ViewModel, что это один и тот объект в памяти
@user-gc4wb2wb7c
@user-gc4wb2wb7c 2 года назад
@@AndroidBroadcast спасибо
@SmoukingMouse
@SmoukingMouse 2 года назад
Google - сделал Dagger 2 и показал что в андроиде можно в нормальный и быстрый DI, выкатил к нему два разных "extension" что бы облегчить создание этого самого DI так что бы он оставался в рамках концепции DI. Андроид разработчики - продолжают использовать singleton.
@sreda.jevgenij
@sreda.jevgenij 10 месяцев назад
Очень уж на профессиональном уровне, а можно простенко как-то. Ну например зделать приложения с двумя фрагментами или вьювсами и применить даггер, а то очень уж как-то не на земном языке. Хотя может это толька я тут такой :) Но все же спасибо!)
@bro_chenzox
@bro_chenzox Год назад
5:29 Интересная фраза🤔 9:51 ArticlesDeps - это разве модуль? 12:59 Непонятно - слышится как "ArticlesDeps у меня фактически ... [ это и есть ] ... Application Component, который ... [ так же ]... живет". Я правильно расслышал? Странно тогда. Ибо сначала(9:03) ArticlesDeps презентуется зрителям, как простой интерфейс, потом(9:51) как модуль, теперь уже это граф? Возникает вопрос, чтобы обойти такое непростое тройственное понятие, можно ли обойтись оригинальной "кодлабой" по Dagger в части к чему привязать жизненный цикл того, чего вы по вашему решили хранить во ViewModel? Я не пробовал сам пока, в процессе, хотелось бы узнать ваше мнение. А то у вас вышло не очень понятно, а разобраться хочется. 13:10 При инициализации графа используется вызов .application(this) - это случаем не избыточно? Хотелось бы пример того, где вызов будет действительно полезен
@AndroidBroadcast
@AndroidBroadcast Год назад
Про модуль ArticleDeps - оговорка
@AndroidBroadcast
@AndroidBroadcast Год назад
Хранить компонент можно где вам угодно, ViewModel тоже подойдёт
@AndroidBroadcast
@AndroidBroadcast Год назад
application(this) передается в графе для того чтобы там был Context приложения, никакой избыточности
@evgeniierohin521
@evgeniierohin521 2 года назад
Так и не понимаю, зачем ты каждый раз пишешь Component.Builder - он же сам генерится.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Он у меня используется с кастомными параметрами
@evgeniierohin521
@evgeniierohin521 2 года назад
@@AndroidBroadcast Ну ты в примере указал ArticleDes как dependencies для ArticleComponent. Даггер автоматом сгенерирует метод в билдере для articleDeps . Других кастомных параметров я не вижу в конкретном примере.
@dmytromarchuk3023
@dmytromarchuk3023 2 года назад
dd
Далее
Hilt - лёгкий старт в Dagger
32:26
Просмотров 14 тыс.
220 volts ⚡️
00:16
Просмотров 392 тыс.
🎤Пою РЕТРО Песни ✧˖°
3:04:48
Просмотров 1,7 млн
Dagger в Android на практике с MVVM
32:41
Как ускорить Dagger в Android
7:50
Просмотров 4,3 тыс.
220 volts ⚡️
00:16
Просмотров 392 тыс.