Тёмный

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

Тимофей Коваленко
Подписаться 8 тыс.
Просмотров 22 тыс.
50% 1

Показываю реальный пример 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

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

 

29 июн 2024

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 137   
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Записаться ко мне на индивидуальные занятия или групповые курсы по 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 4 дня назад
Это просто золотые уроки. Сколько людей, который уже стали супер программистами, но они вообще не умеют доносить свою мысль простыми словами
@ivantrushin3445
@ivantrushin3445 2 года назад
не знаю, почему так мало просмотров и лайков. Один из самых понятных циклов по архитектуре, что я видел. Я джун и только на этом цикле начал полностью врубаться, как должен работать clean architecture
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Ролики по образованию в целом не особо популярная тема.
@sergiomatiash5977
@sergiomatiash5977 2 года назад
Аналогично. Учусь и разбираю, объяснение просто замечательные
@andrey.shpilevoy
@andrey.shpilevoy 7 месяцев назад
Чтобы собрать просмотры и лайки, нужно кидать ментос в колу
@ArturLocal
@ArturLocal Месяц назад
Грамотный текст, внятный четкий голос - что еще надо для хорошей учебы )
@user-yu8hq6sg6i
@user-yu8hq6sg6i 2 года назад
спасибо) буду ждать видос по даггер)
@stasleonov5196
@stasleonov5196 Год назад
Программирование это как в сказке, чем дальше, тем страшнее. Огромное спасибо за подробные объяснения
@redfox6089
@redfox6089 2 года назад
Спасибо огромное за видео, у вас очень хороший педагогический подход - смотрите на вещи глазами студента,... все легко и понятно, продолжайте пожалуйста!!!! Если возможно, то хотелось бы видео про ООП, SOLID, DRY, ....flow тоже очень интересен
@luckywick8911
@luckywick8911 2 года назад
Спасибо!) Очень вовремя! Ждем еще видео по архитектуре!
@senk0n
@senk0n 2 года назад
Топовые ролики, смотрю всю серию по архитектуре от начала, огромное спасиба за доступный материал!
@dervanowsky
@dervanowsky 2 года назад
глянул видео первым. очень круто!) теперь буду clean architecture познавать)))
@katorabian
@katorabian 2 года назад
Очень вовремя мне скинули ссылку на ваш курс. Все было понятно и доходчиво, спасибо) После сдачи проекта, возьмусь смотреть с первых видео этого листа)
@tov3801
@tov3801 2 года назад
Это максимально поелзное видео. Смогла внедрить Koin в свой pet-проект. Спасибо вам большое!
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
👍
@user-df2hp7zm8q
@user-df2hp7zm8q Год назад
Просто шикарные уроки, объяснения, наверное лучшие на ютубе..
@user-zo4ml2mg2s
@user-zo4ml2mg2s 2 года назад
Спасибо огромное за ваш труд !!! Невероятно хорошее объяснение, обожаю такие форматы где сначала лектор делает ошибку а потом исправляет ее )
@user-cf6dy8jv6m
@user-cf6dy8jv6m 11 месяцев назад
Спасибо за видео! Для любого студента большое счастье, когда в преподавателе сочетаются знание предмете и методологический талант. Продолжайте пожалуйста расширять тематику Ваших видеоуроков. Для нас (надеюсь, что это общее мнение) будут интересны любые темы в Вашем изложении! Конечно желаю творческих успехов.
@user-kl3wn2lb5y
@user-kl3wn2lb5y 2 года назад
Посмотрел ваши уроки по clean architecture, все максимально понятно. Особенная благодарность за визуализацию=)
@sergeyorlovskiy3537
@sergeyorlovskiy3537 2 года назад
У вас талант! Четкая дикция, грамотное объяснение! Делайте больше таких видео!
@mariakottur
@mariakottur Год назад
Уроки - огонь. С ними себя увереннее чувствуешь :)
@dashazhuravleva9724
@dashazhuravleva9724 2 года назад
Первое видео, которое понятно объяснило суть DI и Koin. Низкий поклон, лайк и подписка
@uladezhda8850
@uladezhda8850 Год назад
Тимофей, вы очень крутой! Спасибо вам за структурность и последовательность объяснений! Всё понимается с первого просмотра, ну разве что несколько раз назад перематываешь)
@user-tg1yr1dt4n
@user-tg1yr1dt4n 2 года назад
Огромное спасибо приятно учиться когда так подробно всё объясняют Немного жалею что взял один курс а теперь понимаю что надо было брать у вас. К сожалению не без этого))
@tcyniktcynik2545
@tcyniktcynik2545 Год назад
Толково, интересно, познавательно. Большое спасибо!
@spyro2008
@spyro2008 3 месяца назад
Как всегда все супер понятно и супер полезно! Спасибо Вам! ❤‍🔥
@larisavishnyakova5832
@larisavishnyakova5832 Год назад
Тимофей, спасибо за ваши уроки. Снова захотелось учиться!
@user-zj8in3ip8e
@user-zj8in3ip8e Год назад
Все просто и максимально доступно объяснено. Спасибо)
@elenamelnikova7994
@elenamelnikova7994 Год назад
Такой тип архитектуры сейчас востребован на рынке. На одном из интервью меня спрашивали именно ее. Благодарю за четкое и понятное объяснение.
@shakhriyarbadalov5628
@shakhriyarbadalov5628 9 месяцев назад
Спасибо очень хорошие уроки по чистой архитектуре вы объясняете понятно и доходчиво))
@lirjarmuhametova8516
@lirjarmuhametova8516 Год назад
Курс огонь! Спасибо большое за знания 🤗
@cheguevara6002
@cheguevara6002 11 месяцев назад
спасибо за подробный и четкий разбор этой темы)
@user-bu7zr1kd1j
@user-bu7zr1kd1j 2 года назад
Спасибо за ваш труд, все очень понятно объясняете.
@sovrinfo
@sovrinfo 2 года назад
Спасибо за видео.Коммент в поддержку!
@user-gc9rm5yo1y
@user-gc9rm5yo1y Год назад
Большое спасибо автору. Очень подробно объясняете. Подписался, буду смотреть дальше.
@user-fs1po9fz8b
@user-fs1po9fz8b Год назад
Спасибо, тёзка. Отличный курс!
@SanyaNapalm
@SanyaNapalm 2 года назад
22:35 при "androidLogger(Level.DEBUG)" приложение крашится с ошибкой "java.lang.NoSuchMethodError: No static method toDouble-impl(JLjava/util/concurrent/TimeUnit;)...". Если заменить на "androidLogger(Level.ERROR)" - нормально запускается.
@anunnaj
@anunnaj 2 года назад
У меня та же самая ошибка вышла, методом тыка решил, интересно, почему через дебаг крашиться приложение
@lirjarmuhametova8516
@lirjarmuhametova8516 Год назад
Ребята, спасибо большое, что пишите про ошибки в комментариях. Прям очень помогли. У меня та же ошибка
@user-fs1po9fz8b
@user-fs1po9fz8b Год назад
А у меня крашилось с Found interface kotlin.time.TimeMark, but class was expected .... Спасибо, натолкнули на мысль Debug поменял на Error, и запустилось.
@sytyluipes
@sytyluipes 5 месяцев назад
Спасибо за видео, в первые слышу о DI, в учебе не сталкивался с проблемой зависимостей. Теперь вижу что koin простой, но концепцию нужно еще распробовать на практике.
@mihailpalminschi
@mihailpalminschi 2 года назад
Лучший плейлист по Андроиду из всего что есть на Ютубе. Раньше казалось что архитектура, di, mvvm это что-то сложное, что нужно долго это все изучать. Большое спасибо, хотелось бы еще увидеть это все на чуть более сложном проекте.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Да, будет обязательно пример на более сложном проекте.
@oliakurcheuskaya1757
@oliakurcheuskaya1757 2 года назад
Супер!
@sardoramanov8960
@sardoramanov8960 2 года назад
Спасибо огромное) За 20 минут научился как работать с Koin)
@__Minecraft_Poseidon__
@__Minecraft_Poseidon__ 2 года назад
Спасибо вам за уроки!
@musaffo_sky
@musaffo_sky 2 года назад
пожалуйста, публикуйте видео чаще хотя бы раз в неделю
@bair1171
@bair1171 3 месяца назад
Такая лаконичная библиотека, супер облегчает
@Artur_Maji
@Artur_Maji 6 месяцев назад
Очень многие вещают,не учитывая вложенность одной темы, технологии в другую,отсюда порой применимость инфы минимальна. А Вам респект!
@serg_life
@serg_life 2 года назад
Я как раз вчера искал уроки на тему Koin на русском их можно сказать и нет. На английском не все понятно к сожелению, прям вовремя не то слово. Видео только начел смотреть, но уверен все норм обьясниш судя по ранее записанным видео. Прям канал выручалочка))
@Woker2k20
@Woker2k20 2 года назад
Спасибо. Очень все понятно.
@viktormudzhyri4914
@viktormudzhyri4914 2 года назад
Большое спасибо)
@user-ug6ou4bd3p
@user-ug6ou4bd3p 10 месяцев назад
Великолепно!
@magzhannurbapa5303
@magzhannurbapa5303 2 года назад
Просто вау👍👍
@dmitryfirst
@dmitryfirst 10 месяцев назад
Тимофей, спасибо за этот плейлист
@vlad3407
@vlad3407 2 года назад
Спасибо!!!
@bair1171
@bair1171 3 месяца назад
Огонь!!!!
@AbdulahadXadiaytillayev
@AbdulahadXadiaytillayev Год назад
вы очень хорошо обяснили
@luckydevil1601
@luckydevil1601 Год назад
Очень интересно, спасибо! Выглядит попроще, чем Hilt, видимо, потому что аннотации не требуются
@madmax_2994
@madmax_2994 2 года назад
Спасибо!
@YulyaUlyanova
@YulyaUlyanova 2 года назад
Лучший!
@Nidvoraich
@Nidvoraich 11 месяцев назад
Хороший комментарий для приятного ощущения :)
@scorkSH
@scorkSH 3 месяца назад
как то так прсто все), что кажеться, что не чего не понял) но показано и обьеснено, все очень просто и понятно)
@abuiman5251
@abuiman5251 2 года назад
Спасибо!!
@haykmkrtchyan7093
@haykmkrtchyan7093 12 дней назад
Спасибо за ценные уроки, смотрю с удовольствием 🤩Есть один вопрос у меня, у нас в app module мы добавили и domain, и data, чтобы смогли создать дерево DI и предоставить объекты storage, repository, usecase... Но правильно ли, что app module видит data слой тоже? 🤔 И если брать в учет, что у нас могут быть и другие модули, то выходит app module имеет доступ ко всем их)
@iharkryzheuski3468
@iharkryzheuski3468 6 месяцев назад
Класс
@kafychannel
@kafychannel 2 года назад
Тимофей,спасибо за видео,очень полезно. Хотел у вас спросить: когда может понадобиться использовать factory {} вместо single {}?. Почему обычно use cases создают через factory {}? Почему бы не юзать все время single {}?Спасибо
@tequilaonelove
@tequilaonelove 2 года назад
factory используют, когда необходимо создавать разные инстансы (экземпляры) одних и тех же зависимостей. single - когда необходимо иметь один и тот же экземпляр класса, в разных частях/экранах вашего приложения. Допустим у вас есть два экрана в приложении и один какой-нибудь объект, который может хранить в себе какое-нибудь состояние/данные. Возмем к примеру ту же самую вьюмодель. На одном экране вы подписываетесь на какую-нибудь livedata из вашей вьюмодели. И на другом экране проделываете тоже самое. Если вы отметили вашу вьюмодель как single, то на двух ваших фрагментах(экранах), в случае восстановления/ перевороте экрана, вы будете получать одно и то же состояние и одни и те же данные. Если вы отметили вашу вью модель как factory, то на двух фрагментах у вас будет создано два разных экземпляра вьюмодели. И весь ваш стейт будет различный. Ваш первый фрагмент будет иметь свой экземпляр вьюмодельки и никак не влиять на другой второй фрагмент. Конечно у коина так же есть скоупы, которые позволяют разрулить жизненный цикл ваших зависимостей, относительно того, жив ли допустим ваш экран или нет. При этом сценарии, зависимости указанные как single и привязанные к какому то скоупу, будут все равно уничтожаться и пересоздаваться, ровным счётом также, как factory.
@karenbagratyan3280
@karenbagratyan3280 Год назад
spasibo ochen
@MrLight363
@MrLight363 2 года назад
👍
@user-hx9ur3qr2q
@user-hx9ur3qr2q 8 месяцев назад
Хороший коментарий)
@KO3Jlbl
@KO3Jlbl Год назад
Хороший комментарий.
@user-xw3ek8sf9t
@user-xw3ek8sf9t 2 года назад
"Это просто песня какая-то!" выглядит действительно как отличная замена через чур громозкого Dagger'а
@tequilaonelove
@tequilaonelove 2 года назад
Ага. Если только ваше приложение состоит из одного экрана и 1-го модуля ) Когда вы решите сделать многомодульное приложение, с десятками экранов, то это уже не будет выглядеть как отличная замена. Особенно когда начнёте получать ошибки предоставления зависимостей в рантайме, а не на момент компиляции кода =)
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Koin отлично живет в больших проектах. Ошибка рантайм - да, есть такое, но это обходится тестами, например у меня на большом проекте за несколько лет ни разу не вылезла такая ошибка в продакшене.
@stasmois8887
@stasmois8887 2 года назад
Здрастуйте, спасибо за понятное изложение информации! на пальцах как говорится) С юзкейсами и репозиториями в коине все понятно. Как использовать DataStore в koin? ViewModels без фабрик и пустым конструктором тоже в di? Ещё записался к вам на индивидуальные курсы, с нетерпением жду ответа.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Стараюсь всем отвечать, но уж очень много заявок, физически не успеваю всем быстро ответить.
@MxMayers
@MxMayers 2 года назад
Замечательное видео спасибо огромное за разъяснение! 1:46 подскажите когда 50 UseCase их наверное как то делят по папкам? Я сейчас набросал в редакторе схем, получилось 9 UseCase мне их сразу раскладывать в папки к которым они логически относятся?
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Да, просто поделите папками и все.
@user-hc6xf4gy3c
@user-hc6xf4gy3c 2 года назад
хороший комметарий
@dmbezoar
@dmbezoar 11 месяцев назад
Спасибо за видео! Во время моей работы с Koin, у меня возник вопрос. Ранее я уже работал с Dagger 2 и обычно хранить модуль вьюмодели на уровне компонента App там было не вполне нормально, для этого был ActivityComponent, а то и FragmentComponent, если ВМ привязана к одному фрагменту в сингл-активити приложении. Здесь получается все модули так или иначе будут обьявлены в App и подключить дополнительный Component c модулями в Активити или Фрагменте не выйдет. Или я ошибаюсь?
@TimofeyKovalenko
@TimofeyKovalenko 10 месяцев назад
Ошибаетесь. В Koin тоже можно делать отдельные компоненты для экранов или фичей и загружать/выгружать их по необходимости
@user-vy9rz5cl3n
@user-vy9rz5cl3n 11 месяцев назад
Спасибо, мне кажется хилт попроще будет)
@TimofeyKovalenko
@TimofeyKovalenko 5 месяцев назад
У всех свои плюсы есть, мне лично koin больше нравится)
@pavelpotapov9866
@pavelpotapov9866 2 года назад
красава
@Majjabee-np9nq
@Majjabee-np9nq 2 года назад
Its perfectly
@renheyzer5125
@renheyzer5125 2 года назад
Здравствуйте Тимофей, у меня возник к вам вопрос, совместимы ли Clean Architecture и библиотека для пагинации Paging 3? Я обучаюсь на андроид разработчика на языке Kotlin, и у меня возник этот вопрос, т.к. domain слой не должен быть зависим от сторонних библиотек, как я понимаю.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Paging 3 это либа из androidx, в домене ее не должно быть. Поэтому тут нужно использовать свои объекты в домене и пейджинг использовать только на presentation. Я бы ее вообще не использовал, реализовать пейджинг задача не сложная и вполне можно обойтись своим кодом.
@andreivasilevitsky3477
@andreivasilevitsky3477 2 года назад
Здравствуйте Тимофей. Вопрос по поводу инициализации ViewModel. Даже в не большем проекте будет около 50 Fragments/Activity у каждого есть ViewModel. Для того чтобы Koin подцепил все зависимости при использовании by viewmodels, все эти ViewModels должны быть объявлены в models{}? Есть ли в Koin аналогичные Hilt annotation?
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Да, все должно быть в models{}. В целом, мне лично, подход с явным объявлением провайдеров больше нравится, можно легко найти все провайдеры для моделей в одном месте. Но приходится платить за это размером кода. Такого как в Hilt в Koin нет.
@andreivasilevitsky3477
@andreivasilevitsky3477 2 года назад
@@TimofeyKovalenko Спасибо за ответ. Тогда какие best practices в случае много модульного проекта? Например: ест модуль UI в нем есть models{}, модуль UI видит модуль app. Как передают models из UI в app для выполнения startKoin()?
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
app модуль ничего не должен знать про UI модуль. Зачем вам в app передавать зависимости ViewModel?
@leojoshiro
@leojoshiro 2 года назад
Здравствуйте Тимофей когда будет новое видео? мы ждем с нетерпением
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Вот вот, уже в процессе).
@Klimpton
@Klimpton Год назад
Здравствуйте, спасибо за такие отличные уроки, возникла проблема, что если ставлю androidLogger(Level.DEBUG) приложение крашит с непонятной ошибкой, но если поставить androidLogger(Level.NONE) то всё отлично работает, это же не нормально ?
@user-hi1kb9ob1h
@user-hi1kb9ob1h 6 месяцев назад
У меня та же ошибка, тоже не могу понять, почему ее выдает
@arsenthompson
@arsenthompson 2 года назад
Merci
@Sergey8397
@Sergey8397 Год назад
Тимофей, спасибо за качественный материал. Однако есть такой вопрос: для чего вся эта Clean Archeticture? Функционал приложения с первого урока в этом плэйлисте не изменился почти никак (за исключением сохранения данных при поворотах во вьюхах благодаря ViewModel). В остальном код многократно усложнился, наплодилось просто гигантское количество сущностей (методов, классов, моделей, сторонних библиотек и т.д.). Почему такая структура считается понятнее и проще для других программистов (как Вы объясняли в начале)? Лично меня она приводит в ужас и кажется крайне сложной и запутанной. Признаюсь, что не работал в больших компаниях разработчиком, только свои проекты, но уже достаточно долго. Решил вот пополнить знания и попробовать себя в роли разработчика в какой-нибудь компании в дальнейшем.
@TimofeyKovalenko
@TimofeyKovalenko Год назад
У нас не стояло задачи добавить новый функционал, поэтому да, функции все те же. С архитектурой всегда так, больше кода, но взамен получаешь более гибкое приложение. Задача всего этого сделать так, что бы когда у тебя много экранов, функционала, много разработчиков на проекте, была возможно все это обслуживать и менять, без риска сломать остальные части приложения. Также, такая архитектура помогает связать руки разработчикам, и избежать хард кода, когда хочется побыстрому что-то запилить с мыслями когда-нибудь потом исправить))). Что-бы на практике понять плюсы архитектуры - любой, не важно клин или еще что то, нужно пожить на одном проекте длительное время, хотя бы года два, тогда наглядно будут понятны все преимущества. Часто разработчики приходят и уходят))), не заботясь о том, что будет дальше после них, поэтому без опыта и не видят смысла в архитектуре.
@user-iy6vg9ik3o
@user-iy6vg9ik3o 2 года назад
оставляю хороший комментарий ;)
@serg888fert4
@serg888fert4 2 года назад
Извините, я наверно прослушал. Не могу понять такую штуку. Получается два одинаковых класса User и UserName, и ещё name сохраняется через SaveUserNameParam. С другой стороны цель применения такой архитектуры - независимость частей кода. Разве не придётся делать изменения в этих трёх классах при изменении одного из них? И разве не сломается при этом приложение? Хотелось бы увидеть, при добавлении в класс User или UserName каких-то полей, приложение не ломается и требуется немного изменений. Спасибо, с уважением.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
В том то и суть, что каждый слой может добавить туда что-то, не затрагивая другие зависимости. Тоесть работает только со своим объектом. А если глобально что то нужно будет добавить, то да, нужно будет добавить на всех уровнять, точнее добавить поддержку в каждой из частей индивидуально.
@renheyzer5125
@renheyzer5125 2 года назад
Здравствуйте Тимофей, это не относится к теме данного видео, но все же у меня возник этот вопрос при создании многомодульного проекта. Вопрос заключается в следующем: В модуль какого типа ложить package "base" - там где находятся BaseFragment, BaseRepository и т.д.? И может ли domain имплементировать интерфейс с base.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
BaseFragment и BaseRepository - очень плохая практика. Особенно BaseFragment -, от этого лучше избавиться, что-бы у вас не было базовых классов для фрагментов или активити. Ну а если без этого никак, то у вас должен быть какой-то core модуль, например core-presentation где будут находится общие ресурсы для ваших модулей.
@renheyzer5125
@renheyzer5125 2 года назад
@@TimofeyKovalenko а по какой причине BaseFragment и ему подобные это плохая практика?
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
В течении жизни проекта в них копиться очень много кода, и в итоге получается так, что все экраны очень жестко зависят от кода базового фрагмента. Истории про то, что все мы умные и ничего туда лишнего закидывать не будет полная ерунда ;), через пару лет базовый фрагмент в проекте превратиться в спагетти.Да и наследование само по себе усложняет код, поэтому лучше этого избегать.
@kafychannel
@kafychannel 2 года назад
@@TimofeyKovalenko Здравствуйте,Тимофей.Почему BaseFragment - плохая практика?Да и вообще,почему базовые классы с общней логикой являются плохой практикой,когда они позволяют нам избегать повторяющегося кода?(DRY - Don't repeat yourself). К тому же базовые классы помогают в инкапсуляции,позволяют не открывать наружу константы,чтобы делать их доступными для всех,можно сделать константы protected и там,где они будут нужны унаследоваться от Base класса.
@tequilaonelove
@tequilaonelove 2 года назад
@@TimofeyKovalenko особенно когда нужен простой фрагмент, а описывать вроде бы всё заново лень.. Смотришь, ого - есть же BaseFragment, и наследуешься от него. А потом у нас все фрагменты живут по принципу: И жнец и швец и на дуде игрец ))
@yoequilibrium6734
@yoequilibrium6734 Год назад
Для чего разделять Koin DI на отдельные модули App, Data, Domain, если они всё равно инициализируются в Application и подтягивают друг друга? Какое практическое применение такого разделения в реальных проектах (понятно,что здесь просто пример)? Или это в данном случае чисто для читаемости?
@TimofeyKovalenko
@TimofeyKovalenko Год назад
В реальном проекте зависимостей очень много, и часто разделяют даже на большее число модулей, что-бы читабельность была нормальная. Иначе будет полотно из кода на сотни строк
@diskortdiskortov4730
@diskortdiskortov4730 2 года назад
У меня почему-то, если использовать андроид логгер, то приложение при запуске падает(
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Может там null у какой-то переменной, которую распечатываете или логгер совсем не логгер - проверьте правильный ли импорт. А так лучше скиньте текст ошибки, без этого невозможно помочь.
@mihailpalminschi
@mihailpalminschi 2 года назад
Тоже самое, import правильный
@ra9ftm
@ra9ftm 2 года назад
Привет! Этот тестовый проект можете куда-нибудь выложить?
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Нет, иначе студенты потом сами это не пишут и результат не очень хороший :). Просто эти видео использую в том числе и для обучения.
@DarkWeret
@DarkWeret 2 года назад
Насколько хорошей практикой является хранить модули в простых файлах? Где-то видел, что модули хранят в объектах. Как лучше сделать?
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Для Koin вполне подходят файлы, это же по сути тот же статик будет только без объекта, нет необходимости именно object писать. И так и так можете делать.
@user-xm5dd8yy1d
@user-xm5dd8yy1d Год назад
А возможно для полного понимания увидеть полный код? Просто не хочется ради одного кусочка видео, смотреть и вручную писать код со всего плэйлиста
@TimofeyKovalenko
@TimofeyKovalenko Год назад
Видео так же использую и для студентов, поэтому код не выкладываю, иначе все просто копирнут, запустят и ничего не сделают сами ;).
@IvandowsOS
@IvandowsOS 2 года назад
Из за 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 2 года назад
А где вы используете androidLoggin? Так же как в примере?
@user-sp4jz8tg1t
@user-sp4jz8tg1t 2 года назад
@@TimofeyKovalenko (опечатался, Logger). Да, верно, полностью копирую Ваш пример. Стоит закоментить строчку androidLogger(Level.Debug) (которая на 23:15) и все работает. Странно, может какой-то глюк AndroidStudio.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Хм, я думаю дело не в Logger. Из за этой строчки не должно падать, скорей всего проблема не здесь.
@idnull8434
@idnull8434 2 года назад
А как koin будет жить в jetpac Compose
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Так же как и сейчас ;), или что вас смущает в сompose?
@idnull8434
@idnull8434 2 года назад
@@TimofeyKovalenko это тонкий намек на то что вы осветили лишь императивный ui в compose нужна udf архитектура. И Koin там чуть по другому работает. P. s. Хотелось бы увидеть просветление этой темы.
@TimofeyKovalenko
@TimofeyKovalenko 2 года назад
Да, сделаю такое видео).
@user-kk1yi2sz1d
@user-kk1yi2sz1d 2 года назад
У меня из-за строчки 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 Год назад
Такая же беда, все как в видео, но крашится бесконечно.
@user-hi1kb9ob1h
@user-hi1kb9ob1h 6 месяцев назад
Попробуй поставить Level.None, тогда ничего не крашится.
@user-hi1kb9ob1h
@user-hi1kb9ob1h 6 месяцев назад
@@alexandralban5682 Попробуй поставить Level.None, тогда ничего не крашится.
Далее
Dagger в Android на практике с MVVM
32:41
Юнит тест для View Model в Android
26:57
220 volts ⚡️
00:16
Просмотров 639 тыс.
Все про Dagger Hilt в Android Studio + Kotlin
52:11
MVVM в Android на практике
41:32
Просмотров 46 тыс.