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

แชร์
ฝัง
  • เผยแพร่เมื่อ 1 ธ.ค. 2024

ความคิดเห็น • 62

  • @AndroidBroadcast
    @AndroidBroadcast  3 ปีที่แล้ว +3

    🔗 Код из видео 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 ปีที่แล้ว +13

    В целом довольно интересно, но что если в проекте Мокси + Dagger + Navigation Component + Многомодульность + Clean Arhitecture хотелось бы посмотреть как можно сделать красиво, + настроить модули внутри модулей транзитивно, чтобы постоянно implementation не писать от одних и тех же библиотек в разных фиче модулях к примеру

  • @alekseyblekot119
    @alekseyblekot119 3 ปีที่แล้ว +5

    Супер! Спасибо большое) действительно не сложно)
    Ещё классно, у вас в видео все время какие-то Котлин-плюшки вижу - типа by notNull() =)

  • @VolodymyrBabenko-w7j
    @VolodymyrBabenko-w7j 3 ปีที่แล้ว +2

    Наконецто!!!

  • @kafychannel
    @kafychannel 2 ปีที่แล้ว

    Спасибо,Кирилл,очень полезные видео !

  • @ЕгорСолдатов-ы7э
    @ЕгорСолдатов-ы7э 3 ปีที่แล้ว

    Ура-а-а! Спасибо большое!

  • @alexkovalchuk3540
    @alexkovalchuk3540 2 ปีที่แล้ว

    большое спасибо, очень доступно. Футболки - супер :)

  • @Ashimoro
    @Ashimoro 2 ปีที่แล้ว +4

    Спасибо!
    Интересно было бы послушать про клин архитектуру, и как она дружит с даггером

  • @quverr
    @quverr 3 ปีที่แล้ว +2

    Думаю многие уже заждались этого выпуска :)

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Да, скоро будет больше

  • @АняРоманова-с1и
    @АняРоманова-с1и 3 ปีที่แล้ว

    супер

  • @kulbabus
    @kulbabus ปีที่แล้ว +2

    Для чего компонент фичи во вью модель класть, если его единственная зависимость в синглтоне хранится? Может есть решение как зависимость не в синглтоне хранить и ограничить жизненным циклом фичи?

  • @ЯрославЕремин-г9и
    @ЯрославЕремин-г9и 3 ปีที่แล้ว

    спасибо

  • @Mazaxict11
    @Mazaxict11 3 ปีที่แล้ว +5

    Показалось маловато, прошёлся по верхам. Хотелось бы увидеть более глубокий разбор. Динамическое создание фичамодулей в реалтайме. Связи между двумя фичамодулями.

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Я связь между фичамодулями не делаю, так как это усложняет архитектуру

  • @deadchannal
    @deadchannal 3 ปีที่แล้ว

    Крутоь!

  • @SmoukingMouse
    @SmoukingMouse 3 ปีที่แล้ว +4

    Google - сделал Dagger 2 и показал что в андроиде можно в нормальный и быстрый DI, выкатил к нему два разных "extension" что бы облегчить создание этого самого DI так что бы он оставался в рамках концепции DI.
    Андроид разработчики - продолжают использовать singleton.

  • @buddaset4226
    @buddaset4226 2 ปีที่แล้ว

    13:05:
    упоминаются другие подходы реализации интерфейса Provider( отличные от синглтона) . А можно пример привести?

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

      Нет, но это будет простой объект с каким-то временем существования и он должен заниматься в какой-то момент

  • @АлексейБатурский
    @АлексейБатурский 3 ปีที่แล้ว +2

    Интересует, каким образом фича будет вызывать другую фичу, если фичемодули не должны знать друг о друге. Тот же NewsList должен открывать NewsDetails. В видео и в коде этот момент не описан

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Это не тема этого видео, но будет показано в отдельном

    • @AntonParonko
      @AntonParonko 3 ปีที่แล้ว +1

      Можешь сделать api модули для каждого фича модуля.
      Там будут реквесты и резалты для работы с конкретным модулем.

  • @bolnoi8
    @bolnoi8 ปีที่แล้ว

    Это что же, мы в фича модуле создаем синглтон хранилище, в которое Application пишет записывает свой компонент? Не считается ли это за утечку? Буквально не утечет конечно, компонент должен прожить столько же, сколько и процесс, но если пользователь на этот экран не собирается идти, то мы получаем ненужный указатель в памяти.

  • @_Killana_
    @_Killana_ 2 ปีที่แล้ว

    Кирилл, привет. Скажи, пожалуйста, а как реализовать такое: Нужно получить @inject класса из модуля Б, в модуль А. Если модуль Б это сабкомпонент модуля А.

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว

      Доставить зависимость из сабкомпонент в комплект нельзя. Если сталкивается с тако задачей, то вы неправильно сделали архитектуру графа.
      Модули не могут доставлять зависимости, а уже тем более быть компонентами! Не путайте терминологию

  • @yuriyderkach9215
    @yuriyderkach9215 3 ปีที่แล้ว

    Супер!!! Отдельное спасибо за ссылку на гитхаб) Огромная просьба не затягивайте с уроком про hilt, интересно послушать ваше мнение. На сколько я знаю hilt не саппортит динамик фичерс, было бы интересно послушать обо всем что он не умеет в отличии от даггера, чтоб не нарваться на неприятный нежданчик во время разработки)

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Он умеет все то же что и Dagger просто удобнее и больше генерирует кода, что упрощает интеграцию с Jetpack библиотеками

    • @ЛесяЙ-ф3ц
      @ЛесяЙ-ф3ц ปีที่แล้ว

      ​@@AndroidBroadcastзначит лучше юзать Hilt?

  • @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 приложения, никакой избыточности

  • @sreda.jevgenij
    @sreda.jevgenij ปีที่แล้ว

    Очень уж на профессиональном уровне, а можно простенко как-то. Ну например зделать приложения с двумя фрагментами или вьювсами и применить даггер, а то очень уж как-то не на земном языке. Хотя может это толька я тут такой :)
    Но все же спасибо!)

  • @agp1444
    @agp1444 2 ปีที่แล้ว

    ссылка на код из видео не открывается :-( пишет "Your connection is not private" и не пускает. это я что-то неправильно делаю?

    • @AndroidBroadcast
      @AndroidBroadcast  2 ปีที่แล้ว +1

      Наверное ссылка пытается в http открываться

  • @ivanchepelkin6347
    @ivanchepelkin6347 3 ปีที่แล้ว

    Отличное решение хранить компоненты во вьюмодели!вопрос : как расшарить компоненты из вюмодели, чтоб можно было их видеть из любой точки приложения?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Можно сделать вот так gist.github.com/kirich1409/3fb3371703b8ed3b9d019f1b00625bca

  • @ВладимирФёдоров-ж5ч
    @ВладимирФёдоров-ж5ч 3 ปีที่แล้ว

    Возможно это глупый вопрос, но я не понял одного, почему при повороте экрана ArticlesFragment, стейт вьюмодельки не сохраняется и он опять билдит компонент

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      ViewModel (при правильном использовании) не будет пересоздаваться, поэтому там и хранится компонент. Возможно оговорка в ролике. Скиньте таймкод про какой момент говорите, пожалуйста

    • @ВладимирФёдоров-ж5ч
      @ВладимирФёдоров-ж5ч 3 ปีที่แล้ว

      ​@@AndroidBroadcast я скачал ваш код из репозитория, и поставил одну точку для дебага в ArticlesComponentViewModel (время на видео 12:02), а вторую в ArticlesFragment(время на видео 15:03)в методе onAttach на ViewModelProvider, и попробовал повернуть экран для изменения состояния, и при каждом повороте экрана я дебагом заходим в ArticlesComponentViewModel и в метод onAttach в ArticlesFragment, получается что компонент каждый раз пересоздавался в ArticlesComponentViewModel?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Нет, он получается. Там же нет вызова создания объекта. Обратите внимание на ссылку на ViewModel, что это один и тот объект в памяти

    • @ВладимирФёдоров-ж5ч
      @ВладимирФёдоров-ж5ч 3 ปีที่แล้ว

      @@AndroidBroadcast спасибо

  • @VolodymyrBabenko-w7j
    @VolodymyrBabenko-w7j 3 ปีที่แล้ว

    Есть очень хорошый цикл статей про многомодульность на хабре. От Лаборатории Касперского. Там тоже очень хорошие материалы. Но насколько я понимаю, концептуально вся "магия" для провайда зависиместей для фичи делается в основном руками.

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Верно. Каждый выбирает свой подход и универсального решения нет

    • @VolodymyrBabenko-w7j
      @VolodymyrBabenko-w7j 3 ปีที่แล้ว

      Больше абстракций - больше свободы принятия решений)

    • @alekseyblekot119
      @alekseyblekot119 3 ปีที่แล้ว

      Дайте ссылочку на хабр, плиз)

    • @VolodymyrBabenko-w7j
      @VolodymyrBabenko-w7j 3 ปีที่แล้ว

      @@alekseyblekot119 щас приеду в прекрасный пустой утренний офис и скину ссылочку)

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      А погуглить в хабе Лаборатории Касперского? Не ленитесь!

  • @nazirjonm6560
    @nazirjonm6560 3 ปีที่แล้ว

    Спасибо большое, каким образом фича будет вызывать другую фичу, если я использую NewsDetails нескольким страницам.
    Для каждого viewmodel fragment/activity NewsDetails надо реализовать?
    Как будет этого правильно реализовать?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Я создаю в каждой фиче интерфейс с необходимым функционалом. Например, фича "news_list" будет иметь специальный интерфейс для навигации в детали, который должен будет предоставлен в зависимостях ArticlesComponent. app модуль знает все модули и сможет реализовать этот навигатор и перенаправлять в нужное русло
      При шаринге данных нужно все делать через слой данных

  • @qrampus9707
    @qrampus9707 3 ปีที่แล้ว

    Спасибо за выпуск. Если у нас будет много фича-модулей и мы будем для каждого модуля предоставлять зависимости, имплементируя интерфейсы, не разрастётся ли наш основной компонент до огромных размеров?

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว +1

      Необязательно их должен основной компонент реализовывать. Это может кто угодно делать

  • @Sk-gb2hx
    @Sk-gb2hx 3 ปีที่แล้ว

    +

  • @evgeniierohin521
    @evgeniierohin521 3 ปีที่แล้ว

    Так и не понимаю, зачем ты каждый раз пишешь Component.Builder - он же сам генерится.

    • @AndroidBroadcast
      @AndroidBroadcast  3 ปีที่แล้ว

      Он у меня используется с кастомными параметрами

    • @evgeniierohin521
      @evgeniierohin521 3 ปีที่แล้ว +4

      @@AndroidBroadcast Ну ты в примере указал ArticleDes как dependencies для ArticleComponent. Даггер автоматом сгенерирует метод в билдере для articleDeps . Других кастомных параметров я не вижу в конкретном примере.

  • @dmytromarchuk3023
    @dmytromarchuk3023 3 ปีที่แล้ว

    dd

  • @ilyaguryanov9237
    @ilyaguryanov9237 5 หลายเดือนก่อน

    а в чем разница между:
    val newDetailsComponent = DaggerArticlesComponent.builder().deps(ArticlesDepsProvider.deps).build()
    и
    val newDetailsComponent = DaggerArticlesComponent.builder().deps(ArticlesDepsStore.deps).build() ?

    • @AndroidBroadcast
      @AndroidBroadcast  5 หลายเดือนก่อน

      Разница в том что разные классы предоставляют зависимость для построения Dagger компонента