Koin в Android на практике c MVVM

Sdílet
Vložit
  • čas přidán 5. 07. 2024
  • Показываю реальный пример DI на пальцах для "чайников" :) с применением библиотеки Koin в Android. Все показываю на практике в коде и на диаграмме. Также разбираем DI (Dependency injection) в архитектуре Clean Architecture (Чистая архитектура), а так же разбираем, как использовать Koin c MVVM.
    Записаться ко мне на индивидуальные занятия или групповые курсы по Android можно на: ✅ KIPARO.COM.
    Оф. документация по Koin: insert-koin.io/
    СОДЕРЖАНИЕ:
    -------------------------------------------------------------------
    00:00:00 - пару вводных слов ;)
    00:00:32 - показываю проблему на диаграмме с Clean Architecture
    00:02:59 - что такое DI (Dependency injection)
    00:03:45 - Dagger
    00:04:31 - Hilt
    00:05:09 - Koin
    00:06:57 - Koin в Android на практике
    00:17:00 - добавление MVVM в Koin
    00:20:56 - конфигурация и старт Koin
    00:24:53 - рисуем DI в диаграмме ;)
    00:26:39 - итоги
    -------------------------------------------------------------------
    На канале также есть и другие уроки по архитектуре.
    Так же, найти меня можно вот тут:
    ✅ Linkedin: / timofeykovalenko
    ✅ Instagram: / ttimofey
    ✅ На моем сайте: kiparo.com/teacher/timofey-ko...
    ✅ FB с анонсами видео: / kiparocom
    #koin #android #kiparo

Komentáře • 137

  • @TimofeyKovalenko
    @TimofeyKovalenko  Před 2 lety +7

    Записаться ко мне на индивидуальные занятия или групповые курсы по Android можно на: ✅ KIPARO.COM.
    СОДЕРЖАНИЕ:
    00:00:00 - пару вводных слов ;)
    00:00:32 - показываю проблему на диаграмме с Clean Architecture
    00:02:59 - что такое DI (Dependency injection)
    00:03:45 - Dagger
    00:04:31 - Hilt
    00:05:09 - Koin
    00:06:57 - Koin в Android на практике
    00:17:00 - добавление MVVM в Koin
    00:20:56 - конфигурация и старт Koin
    00:24:53 - рисуем DI в диаграмме ;)
    00:26:39 - итоги

  • @IbnSabilAbuAbdullah
    @IbnSabilAbuAbdullah Před 10 dny

    Это просто золотые уроки. Сколько людей, который уже стали супер программистами, но они вообще не умеют доносить свою мысль простыми словами

  • @ivantrushin3445
    @ivantrushin3445 Před 2 lety +31

    не знаю, почему так мало просмотров и лайков. Один из самых понятных циклов по архитектуре, что я видел. Я джун и только на этом цикле начал полностью врубаться, как должен работать clean architecture

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety +12

      Ролики по образованию в целом не особо популярная тема.

    • @sergiomatiash5977
      @sergiomatiash5977 Před 2 lety +1

      Аналогично. Учусь и разбираю, объяснение просто замечательные

    • @andrey.shpilevoy
      @andrey.shpilevoy Před 7 měsíci

      Чтобы собрать просмотры и лайки, нужно кидать ментос в колу

  • @ArturLocal
    @ArturLocal Před 2 měsíci

    Грамотный текст, внятный четкий голос - что еще надо для хорошей учебы )

  • @stasleonov5196
    @stasleonov5196 Před rokem +2

    Программирование это как в сказке, чем дальше, тем страшнее. Огромное спасибо за подробные объяснения

  • @redfox6089
    @redfox6089 Před 2 lety +12

    Спасибо огромное за видео, у вас очень хороший педагогический подход - смотрите на вещи глазами студента,... все легко и понятно, продолжайте пожалуйста!!!! Если возможно, то хотелось бы видео про ООП, SOLID, DRY, ....flow тоже очень интересен

  • @user-yu8hq6sg6i
    @user-yu8hq6sg6i Před 2 lety +12

    спасибо) буду ждать видос по даггер)

  • @luckywick8911
    @luckywick8911 Před 2 lety

    Спасибо!) Очень вовремя! Ждем еще видео по архитектуре!

  • @user-kl3wn2lb5y
    @user-kl3wn2lb5y Před 2 lety +2

    Посмотрел ваши уроки по clean architecture, все максимально понятно. Особенная благодарность за визуализацию=)

  • @katorabian
    @katorabian Před 2 lety

    Очень вовремя мне скинули ссылку на ваш курс.
    Все было понятно и доходчиво, спасибо)
    После сдачи проекта, возьмусь смотреть с первых видео этого листа)

  • @sergeyorlovskiy3537
    @sergeyorlovskiy3537 Před 2 lety +1

    У вас талант! Четкая дикция, грамотное объяснение! Делайте больше таких видео!

  • @user-cf6dy8jv6m
    @user-cf6dy8jv6m Před 11 měsíci +1

    Спасибо за видео! Для любого студента большое счастье, когда в преподавателе сочетаются знание предмете и методологический талант. Продолжайте пожалуйста расширять тематику Ваших видеоуроков. Для нас (надеюсь, что это общее мнение) будут интересны любые темы в Вашем изложении! Конечно желаю творческих успехов.

  • @user-zo4ml2mg2s
    @user-zo4ml2mg2s Před 2 lety

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

  • @dashazhuravleva9724
    @dashazhuravleva9724 Před 2 lety +2

    Первое видео, которое понятно объяснило суть DI и Koin. Низкий поклон, лайк и подписка

  • @senk0n
    @senk0n Před 2 lety

    Топовые ролики, смотрю всю серию по архитектуре от начала, огромное спасиба за доступный материал!

  • @uladezhda8850
    @uladezhda8850 Před rokem +3

    Тимофей, вы очень крутой! Спасибо вам за структурность и последовательность объяснений! Всё понимается с первого просмотра, ну разве что несколько раз назад перематываешь)

  • @dervanowsky
    @dervanowsky Před 2 lety

    глянул видео первым. очень круто!) теперь буду clean architecture познавать)))

  • @user-df2hp7zm8q
    @user-df2hp7zm8q Před rokem +1

    Просто шикарные уроки, объяснения, наверное лучшие на ютубе..

  • @elenamelnikova7994
    @elenamelnikova7994 Před rokem

    Такой тип архитектуры сейчас востребован на рынке. На одном из интервью меня спрашивали именно ее. Благодарю за четкое и понятное объяснение.

  • @mariakottur
    @mariakottur Před rokem

    Уроки - огонь. С ними себя увереннее чувствуешь :)

  • @tcyniktcynik2545
    @tcyniktcynik2545 Před rokem +1

    Толково, интересно, познавательно. Большое спасибо!

  • @Arman_127
    @Arman_127 Před 2 lety

    Огромное спасибо приятно учиться когда так подробно всё объясняют
    Немного жалею что взял один курс а теперь понимаю что надо было брать у вас. К сожалению не без этого))

  • @SanyaNapalm
    @SanyaNapalm Před 2 lety +6

    22:35 при "androidLogger(Level.DEBUG)" приложение крашится с ошибкой "java.lang.NoSuchMethodError: No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)...". Если заменить на "androidLogger(Level.ERROR)" - нормально запускается.

    • @anunnaj
      @anunnaj Před 2 lety +1

      У меня та же самая ошибка вышла, методом тыка решил, интересно, почему через дебаг крашиться приложение

    • @lirjarmuhametova8516
      @lirjarmuhametova8516 Před rokem

      Ребята, спасибо большое, что пишите про ошибки в комментариях. Прям очень помогли. У меня та же ошибка

    • @user-fs1po9fz8b
      @user-fs1po9fz8b Před rokem

      А у меня крашилось с Found interface kotlin.time.TimeMark, but class was expected .... Спасибо, натолкнули на мысль Debug поменял на Error, и запустилось.

  • @cheguevara6002
    @cheguevara6002 Před 11 měsíci

    спасибо за подробный и четкий разбор этой темы)

  • @larisavishnyakova5832

    Тимофей, спасибо за ваши уроки. Снова захотелось учиться!

  • @spyro2008
    @spyro2008 Před 3 měsíci

    Как всегда все супер понятно и супер полезно! Спасибо Вам! ❤‍🔥

  • @tov3801
    @tov3801 Před 2 lety +2

    Это максимально поелзное видео. Смогла внедрить Koin в свой pet-проект. Спасибо вам большое!

  • @sovrinfo
    @sovrinfo Před 2 lety +2

    Спасибо за видео.Коммент в поддержку!

  • @user-zj8in3ip8e
    @user-zj8in3ip8e Před rokem

    Все просто и максимально доступно объяснено. Спасибо)

  • @lirjarmuhametova8516
    @lirjarmuhametova8516 Před rokem

    Курс огонь! Спасибо большое за знания 🤗

  • @shakhriyarbadalov5628
    @shakhriyarbadalov5628 Před 9 měsíci

    Спасибо очень хорошие уроки по чистой архитектуре вы объясняете понятно и доходчиво))

  • @sytyluipes
    @sytyluipes Před 6 měsíci

    Спасибо за видео, в первые слышу о DI, в учебе не сталкивался с проблемой зависимостей. Теперь вижу что koin простой, но концепцию нужно еще распробовать на практике.

  • @user-bu7zr1kd1j
    @user-bu7zr1kd1j Před 2 lety

    Спасибо за ваш труд, все очень понятно объясняете.

  • @oliakurcheuskaya1757
    @oliakurcheuskaya1757 Před 2 lety +3

    Супер!

  • @user-fs1po9fz8b
    @user-fs1po9fz8b Před rokem

    Спасибо, тёзка. Отличный курс!

  • @mihailpalminschi
    @mihailpalminschi Před 2 lety +1

    Лучший плейлист по Андроиду из всего что есть на Ютубе.
    Раньше казалось что архитектура, di, mvvm это что-то сложное, что нужно долго это все изучать.
    Большое спасибо, хотелось бы еще увидеть это все на чуть более сложном проекте.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety +2

      Да, будет обязательно пример на более сложном проекте.

  • @user-gc9rm5yo1y
    @user-gc9rm5yo1y Před rokem

    Большое спасибо автору. Очень подробно объясняете. Подписался, буду смотреть дальше.

  • @serg_life
    @serg_life Před 2 lety +1

    Я как раз вчера искал уроки на тему Koin на русском их можно сказать и нет. На английском не все понятно к сожелению, прям вовремя не то слово. Видео только начел смотреть, но уверен все норм обьясниш судя по ранее записанным видео. Прям канал выручалочка))

  • @musaffo_sky
    @musaffo_sky Před 2 lety +3

    пожалуйста, публикуйте видео чаще хотя бы раз в неделю

  • @bair1171
    @bair1171 Před 3 měsíci

    Такая лаконичная библиотека, супер облегчает

  • @Artur_Maji
    @Artur_Maji Před 6 měsíci

    Очень многие вещают,не учитывая вложенность одной темы, технологии в другую,отсюда порой применимость инфы минимальна. А Вам респект!

  • @__Minecraft_Poseidon__

    Спасибо вам за уроки!

  • @sardoramanov8960
    @sardoramanov8960 Před 2 lety

    Спасибо огромное) За 20 минут научился как работать с Koin)

  • @viktormudzhyri4914
    @viktormudzhyri4914 Před 2 lety +1

    Большое спасибо)

  • @user-ug6ou4bd3p
    @user-ug6ou4bd3p Před 11 měsíci

    Великолепно!

  • @magzhannurbapa5303
    @magzhannurbapa5303 Před 2 lety

    Просто вау👍👍

  • @Woker2k20
    @Woker2k20 Před 2 lety

    Спасибо. Очень все понятно.

  • @bair1171
    @bair1171 Před 3 měsíci

    Огонь!!!!

  • @vlad3407
    @vlad3407 Před 2 lety +3

    Спасибо!!!

  • @dmitryfirst
    @dmitryfirst Před 10 měsíci

    Тимофей, спасибо за этот плейлист

  • @AbdulahadXadiaytillayev

    вы очень хорошо обяснили

  • @madmax_2994
    @madmax_2994 Před 2 lety +1

    Спасибо!

  • @Nidvoraich
    @Nidvoraich Před 11 měsíci

    Хороший комментарий для приятного ощущения :)

  • @luckydevil1601
    @luckydevil1601 Před rokem

    Очень интересно, спасибо!
    Выглядит попроще, чем Hilt, видимо, потому что аннотации не требуются

  • @YulyaUlyanova
    @YulyaUlyanova Před 2 lety

    Лучший!

  • @abuiman5251
    @abuiman5251 Před 2 lety

    Спасибо!!

  • @iharkryzheuski3468
    @iharkryzheuski3468 Před 7 měsíci

    Класс

  • @kafychannel
    @kafychannel Před 2 lety +5

    Тимофей,спасибо за видео,очень полезно. Хотел у вас спросить: когда может понадобиться использовать factory {} вместо single {}?. Почему обычно use cases создают через factory {}? Почему бы не юзать все время single {}?Спасибо

    • @tequilaonelove
      @tequilaonelove Před 2 lety +8

      factory используют, когда необходимо создавать разные инстансы (экземпляры) одних и тех же зависимостей.
      single - когда необходимо иметь один и тот же экземпляр класса, в разных частях/экранах вашего приложения.
      Допустим у вас есть два экрана в приложении и один какой-нибудь объект, который может хранить в себе какое-нибудь состояние/данные. Возмем к примеру ту же самую вьюмодель.
      На одном экране вы подписываетесь на какую-нибудь livedata из вашей вьюмодели. И на другом экране проделываете тоже самое.
      Если вы отметили вашу вьюмодель как single, то на двух ваших фрагментах(экранах), в случае восстановления/ перевороте экрана, вы будете получать одно и то же состояние и одни и те же данные.
      Если вы отметили вашу вью модель как factory, то на двух фрагментах у вас будет создано два разных экземпляра вьюмодели. И весь ваш стейт будет различный. Ваш первый фрагмент будет иметь свой экземпляр вьюмодельки и никак не влиять на другой второй фрагмент. Конечно у коина так же есть скоупы, которые позволяют разрулить жизненный цикл ваших зависимостей, относительно того, жив ли допустим ваш экран или нет. При этом сценарии, зависимости указанные как single и привязанные к какому то скоупу, будут все равно уничтожаться и пересоздаваться, ровным счётом также, как factory.

  • @MrLight363
    @MrLight363 Před 2 lety +3

    👍

  • @scorkSH
    @scorkSH Před 3 měsíci

    как то так прсто все), что кажеться, что не чего не понял) но показано и обьеснено, все очень просто и понятно)

  • @haykmkrtchyan7093
    @haykmkrtchyan7093 Před 18 dny

    Спасибо за ценные уроки, смотрю с удовольствием 🤩Есть один вопрос у меня, у нас в app module мы добавили и domain, и data, чтобы смогли создать дерево DI и предоставить объекты storage, repository, usecase... Но правильно ли, что app module видит data слой тоже? 🤔 И если брать в учет, что у нас могут быть и другие модули, то выходит app module имеет доступ ко всем их)

  • @karenbagratyan3280
    @karenbagratyan3280 Před rokem

    spasibo ochen

  • @pavelpotapov9866
    @pavelpotapov9866 Před 2 lety

    красава

  • @KO3Jlbl
    @KO3Jlbl Před rokem

    Хороший комментарий.

  • @user-hx9ur3qr2q
    @user-hx9ur3qr2q Před 8 měsíci

    Хороший коментарий)

  • @MxMayers
    @MxMayers Před 2 lety

    Замечательное видео спасибо огромное за разъяснение! 1:46 подскажите когда 50 UseCase их наверное как то делят по папкам? Я сейчас набросал в редакторе схем, получилось 9 UseCase мне их сразу раскладывать в папки к которым они логически относятся?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Да, просто поделите папками и все.

  • @dmbezoar
    @dmbezoar Před rokem

    Спасибо за видео! Во время моей работы с Koin, у меня возник вопрос. Ранее я уже работал с Dagger 2 и обычно хранить модуль вьюмодели на уровне компонента App там было не вполне нормально, для этого был ActivityComponent, а то и FragmentComponent, если ВМ привязана к одному фрагменту в сингл-активити приложении. Здесь получается все модули так или иначе будут обьявлены в App и подключить дополнительный Component c модулями в Активити или Фрагменте не выйдет. Или я ошибаюсь?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 11 měsíci

      Ошибаетесь. В Koin тоже можно делать отдельные компоненты для экранов или фичей и загружать/выгружать их по необходимости

  • @renheyzer5125
    @renheyzer5125 Před 2 lety

    Здравствуйте Тимофей, у меня возник к вам вопрос, совместимы ли Clean Architecture и библиотека для пагинации Paging 3?
    Я обучаюсь на андроид разработчика на языке Kotlin, и у меня возник этот вопрос, т.к. domain слой не должен быть зависим от сторонних библиотек, как я понимаю.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Paging 3 это либа из androidx, в домене ее не должно быть. Поэтому тут нужно использовать свои объекты в домене и пейджинг использовать только на presentation.
      Я бы ее вообще не использовал, реализовать пейджинг задача не сложная и вполне можно обойтись своим кодом.

  • @user-xw3ek8sf9t
    @user-xw3ek8sf9t Před 2 lety +1

    "Это просто песня какая-то!" выглядит действительно как отличная замена через чур громозкого Dagger'а

    • @tequilaonelove
      @tequilaonelove Před 2 lety

      Ага. Если только ваше приложение состоит из одного экрана и 1-го модуля ) Когда вы решите сделать многомодульное приложение, с десятками экранов, то это уже не будет выглядеть как отличная замена. Особенно когда начнёте получать ошибки предоставления зависимостей в рантайме, а не на момент компиляции кода =)

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Koin отлично живет в больших проектах. Ошибка рантайм - да, есть такое, но это обходится тестами, например у меня на большом проекте за несколько лет ни разу не вылезла такая ошибка в продакшене.

  • @stasmois8887
    @stasmois8887 Před 2 lety

    Здрастуйте, спасибо за понятное изложение информации! на пальцах как говорится)
    С юзкейсами и репозиториями в коине все понятно.
    Как использовать DataStore в koin?
    ViewModels без фабрик и пустым конструктором тоже в di?
    Ещё записался к вам на индивидуальные курсы, с нетерпением жду ответа.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Стараюсь всем отвечать, но уж очень много заявок, физически не успеваю всем быстро ответить.

  • @Majjabee-np9nq
    @Majjabee-np9nq Před 2 lety

    Its perfectly

  • @arsenthompson
    @arsenthompson Před 2 lety

    Merci

  • @andreivasilevitsky3477

    Здравствуйте Тимофей.
    Вопрос по поводу инициализации ViewModel.
    Даже в не большем проекте будет около 50 Fragments/Activity у каждого есть ViewModel.
    Для того чтобы Koin подцепил все зависимости при использовании by viewmodels, все эти ViewModels должны
    быть объявлены в models{}?
    Есть ли в Koin аналогичные Hilt annotation?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety +1

      Да, все должно быть в models{}. В целом, мне лично, подход с явным объявлением провайдеров больше нравится, можно легко найти все провайдеры для моделей в одном месте. Но приходится платить за это размером кода. Такого как в Hilt в Koin нет.

    • @andreivasilevitsky3477
      @andreivasilevitsky3477 Před 2 lety

      @@TimofeyKovalenko Спасибо за ответ. Тогда какие best practices в случае много модульного
      проекта? Например: ест модуль UI в нем есть models{}, модуль UI видит модуль app. Как передают
      models из UI в app для выполнения startKoin()?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      app модуль ничего не должен знать про UI модуль. Зачем вам в app передавать зависимости ViewModel?

  • @Klimpton
    @Klimpton Před rokem

    Здравствуйте, спасибо за такие отличные уроки, возникла проблема, что если ставлю androidLogger(Level.DEBUG) приложение крашит с непонятной ошибкой, но если поставить androidLogger(Level.NONE) то всё отлично работает, это же не нормально ?

    • @user-hi1kb9ob1h
      @user-hi1kb9ob1h Před 7 měsíci

      У меня та же ошибка, тоже не могу понять, почему ее выдает

  • @user-vy9rz5cl3n
    @user-vy9rz5cl3n Před rokem

    Спасибо, мне кажется хилт попроще будет)

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 5 měsíci

      У всех свои плюсы есть, мне лично koin больше нравится)

  • @leojoshiro
    @leojoshiro Před 2 lety +1

    Здравствуйте Тимофей когда будет новое видео?
    мы ждем с нетерпением

  • @Sergey8397
    @Sergey8397 Před rokem

    Тимофей, спасибо за качественный материал.
    Однако есть такой вопрос: для чего вся эта Clean Archeticture? Функционал приложения с первого урока в этом плэйлисте не изменился почти никак (за исключением сохранения данных при поворотах во вьюхах благодаря ViewModel). В остальном код многократно усложнился, наплодилось просто гигантское количество сущностей (методов, классов, моделей, сторонних библиотек и т.д.). Почему такая структура считается понятнее и проще для других программистов (как Вы объясняли в начале)? Лично меня она приводит в ужас и кажется крайне сложной и запутанной. Признаюсь, что не работал в больших компаниях разработчиком, только свои проекты, но уже достаточно долго. Решил вот пополнить знания и попробовать себя в роли разработчика в какой-нибудь компании в дальнейшем.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před rokem +1

      У нас не стояло задачи добавить новый функционал, поэтому да, функции все те же. С архитектурой всегда так, больше кода, но взамен получаешь более гибкое приложение. Задача всего этого сделать так, что бы когда у тебя много экранов, функционала, много разработчиков на проекте, была возможно все это обслуживать и менять, без риска сломать остальные части приложения. Также, такая архитектура помогает связать руки разработчикам, и избежать хард кода, когда хочется побыстрому что-то запилить с мыслями когда-нибудь потом исправить))).
      Что-бы на практике понять плюсы архитектуры - любой, не важно клин или еще что то, нужно пожить на одном проекте длительное время, хотя бы года два, тогда наглядно будут понятны все преимущества. Часто разработчики приходят и уходят))), не заботясь о том, что будет дальше после них, поэтому без опыта и не видят смысла в архитектуре.

  • @user-hc6xf4gy3c
    @user-hc6xf4gy3c Před 2 lety

    хороший комметарий

  • @serg888fert4
    @serg888fert4 Před 2 lety

    Извините, я наверно прослушал. Не могу понять такую штуку. Получается два одинаковых класса User и UserName, и ещё name сохраняется через SaveUserNameParam. С другой стороны цель применения такой архитектуры - независимость частей кода. Разве не придётся делать изменения в этих трёх классах при изменении одного из них? И разве не сломается при этом приложение? Хотелось бы увидеть, при добавлении в класс User или UserName каких-то полей, приложение не ломается и требуется немного изменений. Спасибо, с уважением.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      В том то и суть, что каждый слой может добавить туда что-то, не затрагивая другие зависимости. Тоесть работает только со своим объектом.
      А если глобально что то нужно будет добавить, то да, нужно будет добавить на всех уровнять, точнее добавить поддержку в каждой из частей индивидуально.

  • @renheyzer5125
    @renheyzer5125 Před 2 lety

    Здравствуйте Тимофей, это не относится к теме данного видео, но все же у меня возник этот вопрос при создании многомодульного проекта. Вопрос заключается в следующем: В модуль какого типа ложить package "base" - там где находятся BaseFragment, BaseRepository и т.д.? И может ли domain имплементировать интерфейс с base.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      BaseFragment и BaseRepository - очень плохая практика. Особенно BaseFragment -, от этого лучше избавиться, что-бы у вас не было базовых классов для фрагментов или активити.
      Ну а если без этого никак, то у вас должен быть какой-то core модуль, например core-presentation где будут находится общие ресурсы для ваших модулей.

    • @renheyzer5125
      @renheyzer5125 Před 2 lety

      @@TimofeyKovalenko а по какой причине BaseFragment и ему подобные это плохая практика?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      В течении жизни проекта в них копиться очень много кода, и в итоге получается так, что все экраны очень жестко зависят от кода базового фрагмента. Истории про то, что все мы умные и ничего туда лишнего закидывать не будет полная ерунда ;), через пару лет базовый фрагмент в проекте превратиться в спагетти.Да и наследование само по себе усложняет код, поэтому лучше этого избегать.

    • @kafychannel
      @kafychannel Před 2 lety

      @@TimofeyKovalenko Здравствуйте,Тимофей.Почему BaseFragment - плохая практика?Да и вообще,почему базовые классы с общней логикой являются плохой практикой,когда они позволяют нам избегать повторяющегося кода?(DRY - Don't repeat yourself). К тому же базовые классы помогают в инкапсуляции,позволяют не открывать наружу константы,чтобы делать их доступными для всех,можно сделать константы protected и там,где они будут нужны унаследоваться от Base класса.

    • @tequilaonelove
      @tequilaonelove Před 2 lety

      @@TimofeyKovalenko особенно когда нужен простой фрагмент, а описывать вроде бы всё заново лень.. Смотришь, ого - есть же BaseFragment, и наследуешься от него. А потом у нас все фрагменты живут по принципу: И жнец и швец и на дуде игрец ))

  • @yoequilibrium6734
    @yoequilibrium6734 Před rokem

    Для чего разделять Koin DI на отдельные модули App, Data, Domain, если они всё равно инициализируются в Application и подтягивают друг друга? Какое практическое применение такого разделения в реальных проектах (понятно,что здесь просто пример)? Или это в данном случае чисто для читаемости?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před rokem

      В реальном проекте зависимостей очень много, и часто разделяют даже на большее число модулей, что-бы читабельность была нормальная. Иначе будет полотно из кода на сотни строк

  • @ra9ftm
    @ra9ftm Před 2 lety

    Привет! Этот тестовый проект можете куда-нибудь выложить?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety +1

      Нет, иначе студенты потом сами это не пишут и результат не очень хороший :). Просто эти видео использую в том числе и для обучения.

  • @DarkWeret
    @DarkWeret Před 2 lety

    Насколько хорошей практикой является хранить модули в простых файлах? Где-то видел, что модули хранят в объектах. Как лучше сделать?

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Для Koin вполне подходят файлы, это же по сути тот же статик будет только без объекта, нет необходимости именно object писать. И так и так можете делать.

  • @user-xm5dd8yy1d
    @user-xm5dd8yy1d Před rokem

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

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před rokem +1

      Видео так же использую и для студентов, поэтому код не выкладываю, иначе все просто копирнут, запустят и ничего не сделают сами ;).

  • @diskortdiskortov4730
    @diskortdiskortov4730 Před 2 lety +1

    У меня почему-то, если использовать андроид логгер, то приложение при запуске падает(

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Может там null у какой-то переменной, которую распечатываете или логгер совсем не логгер - проверьте правильный ли импорт. А так лучше скиньте текст ошибки, без этого невозможно помочь.

    • @mihailpalminschi
      @mihailpalminschi Před 2 lety

      Тоже самое, import правильный

  • @user-iy6vg9ik3o
    @user-iy6vg9ik3o Před 2 lety

    оставляю хороший комментарий ;)

  • @IvandowsOS
    @IvandowsOS Před 2 lety

    Из за androidLoggin вылетает приложение. NoSuchMethodError: No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)D in class Lkotlin/time/Duration; or its super classes (declaration of 'kotlin.time.Duration

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      А где вы используете androidLoggin? Так же как в примере?

    • @user-sp4jz8tg1t
      @user-sp4jz8tg1t Před 2 lety

      @@TimofeyKovalenko (опечатался, Logger). Да, верно, полностью копирую Ваш пример. Стоит закоментить строчку androidLogger(Level.Debug) (которая на 23:15) и все работает. Странно, может какой-то глюк AndroidStudio.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Хм, я думаю дело не в Logger. Из за этой строчки не должно падать, скорей всего проблема не здесь.

  • @idnull8434
    @idnull8434 Před 2 lety

    А как koin будет жить в jetpac Compose

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Так же как и сейчас ;), или что вас смущает в сompose?

    • @idnull8434
      @idnull8434 Před 2 lety

      @@TimofeyKovalenko это тонкий намек на то что вы осветили лишь императивный ui в compose нужна udf архитектура. И Koin там чуть по другому работает.
      P. s. Хотелось бы увидеть просветление этой темы.

    • @TimofeyKovalenko
      @TimofeyKovalenko  Před 2 lety

      Да, сделаю такое видео).

  • @user-kk1yi2sz1d
    @user-kk1yi2sz1d Před 2 lety +1

    У меня из-за строчки logged возникает ошибка " No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)D in class Lkotlin/time/Duration; or its super classes (declaration of 'kotlin.time.Duration' appears in /data/app/~~_-1rZ0YNIhro1xGls3dajA==/com.example.daggertest2--M5UP5kSUyc5xEwdUJyhPA==/base.apk)
    at org.koin.core.time.MeasureKt.measureDuration(Measure.kt:32)"
    Прочитал в интернете, что там какие-то конфликты в новой версии котлина с этим логгером. Как это можно пофиксить? Возможно какую-то версию
    Я использовал коин 3.1.2 и котлин 1.7

    • @alexandralban5682
      @alexandralban5682 Před rokem

      Такая же беда, все как в видео, но крашится бесконечно.

    • @user-hi1kb9ob1h
      @user-hi1kb9ob1h Před 7 měsíci

      Попробуй поставить Level.None, тогда ничего не крашится.

    • @user-hi1kb9ob1h
      @user-hi1kb9ob1h Před 7 měsíci

      @@alexandralban5682 Попробуй поставить Level.None, тогда ничего не крашится.