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

  Рет қаралды 23,857

Тимофей Коваленко

Тимофей Коваленко

Күн бұрын

Пікірлер: 141
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Записаться ко мне на индивидуальные занятия или групповые курсы по 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 3 ай бұрын
Это просто золотые уроки. Сколько людей, который уже стали супер программистами, но они вообще не умеют доносить свою мысль простыми словами
@ivantrushin3445
@ivantrushin3445 2 жыл бұрын
не знаю, почему так мало просмотров и лайков. Один из самых понятных циклов по архитектуре, что я видел. Я джун и только на этом цикле начал полностью врубаться, как должен работать clean architecture
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Ролики по образованию в целом не особо популярная тема.
@Sunsets_LoFi
@Sunsets_LoFi 2 жыл бұрын
Аналогично. Учусь и разбираю, объяснение просто замечательные
@andrey.shpilevoy
@andrey.shpilevoy 10 ай бұрын
Чтобы собрать просмотры и лайки, нужно кидать ментос в колу
@ИльяВишняк-м3ь
@ИльяВишняк-м3ь 3 жыл бұрын
спасибо) буду ждать видос по даггер)
@АндрейГанюшкин-ф7е
@АндрейГанюшкин-ф7е Жыл бұрын
Просто шикарные уроки, объяснения, наверное лучшие на ютубе..
@stasleonov5196
@stasleonov5196 2 жыл бұрын
Программирование это как в сказке, чем дальше, тем страшнее. Огромное спасибо за подробные объяснения
@redfox6089
@redfox6089 2 жыл бұрын
Спасибо огромное за видео, у вас очень хороший педагогический подход - смотрите на вещи глазами студента,... все легко и понятно, продолжайте пожалуйста!!!! Если возможно, то хотелось бы видео про ООП, SOLID, DRY, ....flow тоже очень интересен
@ArturLocal
@ArturLocal 5 ай бұрын
Грамотный текст, внятный четкий голос - что еще надо для хорошей учебы )
@ValeriiVorobev
@ValeriiVorobev Жыл бұрын
Спасибо за видео! Для любого студента большое счастье, когда в преподавателе сочетаются знание предмете и методологический талант. Продолжайте пожалуйста расширять тематику Ваших видеоуроков. Для нас (надеюсь, что это общее мнение) будут интересны любые темы в Вашем изложении! Конечно желаю творческих успехов.
@spyro2008
@spyro2008 6 ай бұрын
Как всегда все супер понятно и супер полезно! Спасибо Вам! ❤‍🔥
@Artur_Maji
@Artur_Maji 10 ай бұрын
Очень многие вещают,не учитывая вложенность одной темы, технологии в другую,отсюда порой применимость инфы минимальна. А Вам респект!
@bair1171
@bair1171 6 ай бұрын
Такая лаконичная библиотека, супер облегчает
@sytyluipes
@sytyluipes 9 ай бұрын
Спасибо за видео, в первые слышу о DI, в учебе не сталкивался с проблемой зависимостей. Теперь вижу что koin простой, но концепцию нужно еще распробовать на практике.
@dashazhuravleva9724
@dashazhuravleva9724 2 жыл бұрын
Первое видео, которое понятно объяснило суть DI и Koin. Низкий поклон, лайк и подписка
@mihailpalminschi
@mihailpalminschi 2 жыл бұрын
Лучший плейлист по Андроиду из всего что есть на Ютубе. Раньше казалось что архитектура, di, mvvm это что-то сложное, что нужно долго это все изучать. Большое спасибо, хотелось бы еще увидеть это все на чуть более сложном проекте.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Да, будет обязательно пример на более сложном проекте.
@uladezhda8850
@uladezhda8850 2 жыл бұрын
Тимофей, вы очень крутой! Спасибо вам за структурность и последовательность объяснений! Всё понимается с первого просмотра, ну разве что несколько раз назад перематываешь)
@tov3801
@tov3801 3 жыл бұрын
Это максимально поелзное видео. Смогла внедрить Koin в свой pet-проект. Спасибо вам большое!
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
👍
@cheguevara6002
@cheguevara6002 Жыл бұрын
спасибо за подробный и четкий разбор этой темы)
@МихаилКузнецов-г8у
@МихаилКузнецов-г8у Жыл бұрын
Большое спасибо автору. Очень подробно объясняете. Подписался, буду смотреть дальше.
@elenamelnikova7994
@elenamelnikova7994 2 жыл бұрын
Такой тип архитектуры сейчас востребован на рынке. На одном из интервью меня спрашивали именно ее. Благодарю за четкое и понятное объяснение.
@musaffo_sky
@musaffo_sky 3 жыл бұрын
пожалуйста, публикуйте видео чаще хотя бы раз в неделю
@tcyniktcynik2545
@tcyniktcynik2545 Жыл бұрын
Толково, интересно, познавательно. Большое спасибо!
@эмильискаков-в9с
@эмильискаков-в9с 2 жыл бұрын
Посмотрел ваши уроки по clean architecture, все максимально понятно. Особенная благодарность за визуализацию=)
@shakhriyarbadalov5628
@shakhriyarbadalov5628 Жыл бұрын
Спасибо очень хорошие уроки по чистой архитектуре вы объясняете понятно и доходчиво))
@dervanowsky
@dervanowsky 2 жыл бұрын
глянул видео первым. очень круто!) теперь буду clean architecture познавать)))
@luckydevil1601
@luckydevil1601 Жыл бұрын
Очень интересно, спасибо! Выглядит попроще, чем Hilt, видимо, потому что аннотации не требуются
@sergeyorlovskiy3537
@sergeyorlovskiy3537 2 жыл бұрын
У вас талант! Четкая дикция, грамотное объяснение! Делайте больше таких видео!
@sovrinfo
@sovrinfo 3 жыл бұрын
Спасибо за видео.Коммент в поддержку!
@mariakottur
@mariakottur Жыл бұрын
Уроки - огонь. С ними себя увереннее чувствуешь :)
@Nidvoraich
@Nidvoraich Жыл бұрын
Хороший комментарий для приятного ощущения :)
@katorabian
@katorabian 2 жыл бұрын
Очень вовремя мне скинули ссылку на ваш курс. Все было понятно и доходчиво, спасибо) После сдачи проекта, возьмусь смотреть с первых видео этого листа)
@senk0n
@senk0n 2 жыл бұрын
Топовые ролики, смотрю всю серию по архитектуре от начала, огромное спасиба за доступный материал!
@serg_life
@serg_life 3 жыл бұрын
Я как раз вчера искал уроки на тему Koin на русском их можно сказать и нет. На английском не все понятно к сожелению, прям вовремя не то слово. Видео только начел смотреть, но уверен все норм обьясниш судя по ранее записанным видео. Прям канал выручалочка))
@larisavishnyakova5832
@larisavishnyakova5832 2 жыл бұрын
Тимофей, спасибо за ваши уроки. Снова захотелось учиться!
@ТимофейГорохов-ч8щ
@ТимофейГорохов-ч8щ Жыл бұрын
Спасибо, тёзка. Отличный курс!
@ЕвгенийДолгушев-я2х
@ЕвгенийДолгушев-я2х Жыл бұрын
Все просто и максимально доступно объяснено. Спасибо)
@dmitryfirst
@dmitryfirst Жыл бұрын
Тимофей, спасибо за этот плейлист
@oliakurcheuskaya1757
@oliakurcheuskaya1757 3 жыл бұрын
Супер!
@ЕгорПоляков-т5ъ
@ЕгорПоляков-т5ъ 2 жыл бұрын
Спасибо огромное за ваш труд !!! Невероятно хорошее объяснение, обожаю такие форматы где сначала лектор делает ошибку а потом исправляет ее )
@sardoramanov8960
@sardoramanov8960 2 жыл бұрын
Спасибо огромное) За 20 минут научился как работать с Koin)
@vlad3407
@vlad3407 3 жыл бұрын
Спасибо!!!
@luckywick8911
@luckywick8911 3 жыл бұрын
Спасибо!) Очень вовремя! Ждем еще видео по архитектуре!
@Arman_127
@Arman_127 2 жыл бұрын
Огромное спасибо приятно учиться когда так подробно всё объясняют Немного жалею что взял один курс а теперь понимаю что надо было брать у вас. К сожалению не без этого))
@АлексейМандрыкин-ч7е
@АлексейМандрыкин-ч7е 2 жыл бұрын
Спасибо за ваш труд, все очень понятно объясняете.
@kafychannel
@kafychannel 2 жыл бұрын
Тимофей,спасибо за видео,очень полезно. Хотел у вас спросить: когда может понадобиться использовать factory {} вместо single {}?. Почему обычно use cases создают через factory {}? Почему бы не юзать все время single {}?Спасибо
@tequilaonelove
@tequilaonelove 2 жыл бұрын
factory используют, когда необходимо создавать разные инстансы (экземпляры) одних и тех же зависимостей. single - когда необходимо иметь один и тот же экземпляр класса, в разных частях/экранах вашего приложения. Допустим у вас есть два экрана в приложении и один какой-нибудь объект, который может хранить в себе какое-нибудь состояние/данные. Возмем к примеру ту же самую вьюмодель. На одном экране вы подписываетесь на какую-нибудь livedata из вашей вьюмодели. И на другом экране проделываете тоже самое. Если вы отметили вашу вьюмодель как single, то на двух ваших фрагментах(экранах), в случае восстановления/ перевороте экрана, вы будете получать одно и то же состояние и одни и те же данные. Если вы отметили вашу вью модель как factory, то на двух фрагментах у вас будет создано два разных экземпляра вьюмодели. И весь ваш стейт будет различный. Ваш первый фрагмент будет иметь свой экземпляр вьюмодельки и никак не влиять на другой второй фрагмент. Конечно у коина так же есть скоупы, которые позволяют разрулить жизненный цикл ваших зависимостей, относительно того, жив ли допустим ваш экран или нет. При этом сценарии, зависимости указанные как single и привязанные к какому то скоупу, будут все равно уничтожаться и пересоздаваться, ровным счётом также, как factory.
@AbdulahadXadiaytillayev
@AbdulahadXadiaytillayev Жыл бұрын
вы очень хорошо обяснили
@lirjarmuhametova8516
@lirjarmuhametova8516 Жыл бұрын
Курс огонь! Спасибо большое за знания 🤗
@ГлебСимаков-ф1д
@ГлебСимаков-ф1д Жыл бұрын
Великолепно!
@bair1171
@bair1171 6 ай бұрын
Огонь!!!!
@viktormudzhyri4914
@viktormudzhyri4914 3 жыл бұрын
Большое спасибо)
@Sergey8397
@Sergey8397 Жыл бұрын
Тимофей, спасибо за качественный материал. Однако есть такой вопрос: для чего вся эта Clean Archeticture? Функционал приложения с первого урока в этом плэйлисте не изменился почти никак (за исключением сохранения данных при поворотах во вьюхах благодаря ViewModel). В остальном код многократно усложнился, наплодилось просто гигантское количество сущностей (методов, классов, моделей, сторонних библиотек и т.д.). Почему такая структура считается понятнее и проще для других программистов (как Вы объясняли в начале)? Лично меня она приводит в ужас и кажется крайне сложной и запутанной. Признаюсь, что не работал в больших компаниях разработчиком, только свои проекты, но уже достаточно долго. Решил вот пополнить знания и попробовать себя в роли разработчика в какой-нибудь компании в дальнейшем.
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
У нас не стояло задачи добавить новый функционал, поэтому да, функции все те же. С архитектурой всегда так, больше кода, но взамен получаешь более гибкое приложение. Задача всего этого сделать так, что бы когда у тебя много экранов, функционала, много разработчиков на проекте, была возможно все это обслуживать и менять, без риска сломать остальные части приложения. Также, такая архитектура помогает связать руки разработчикам, и избежать хард кода, когда хочется побыстрому что-то запилить с мыслями когда-нибудь потом исправить))). Что-бы на практике понять плюсы архитектуры - любой, не важно клин или еще что то, нужно пожить на одном проекте длительное время, хотя бы года два, тогда наглядно будут понятны все преимущества. Часто разработчики приходят и уходят))), не заботясь о том, что будет дальше после них, поэтому без опыта и не видят смысла в архитектуре.
@scorkSH
@scorkSH 7 ай бұрын
как то так прсто все), что кажеться, что не чего не понял) но показано и обьеснено, все очень просто и понятно)
@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 Жыл бұрын
Ребята, спасибо большое, что пишите про ошибки в комментариях. Прям очень помогли. У меня та же ошибка
@ТимофейГорохов-ч8щ
@ТимофейГорохов-ч8щ Жыл бұрын
А у меня крашилось с Found interface kotlin.time.TimeMark, but class was expected .... Спасибо, натолкнули на мысль Debug поменял на Error, и запустилось.
@haykmkrtchyan7093
@haykmkrtchyan7093 3 ай бұрын
Спасибо за ценные уроки, смотрю с удовольствием 🤩Есть один вопрос у меня, у нас в app module мы добавили и domain, и data, чтобы смогли создать дерево DI и предоставить объекты storage, repository, usecase... Но правильно ли, что app module видит data слой тоже? 🤔 И если брать в учет, что у нас могут быть и другие модули, то выходит app module имеет доступ ко всем их)
@TimofeyKovalenko
@TimofeyKovalenko Ай бұрын
В нашем случае app module содержит presentation, поэтому да, технически можно достучатся до data из presentation. Что бы этого избежать, нужно разделять app module и presentation.
@guai9632
@guai9632 2 ай бұрын
нормальная тема - на примере сервис-локатора показывать, чтт такое депенденси-инджекшн
@__Minecraft_Poseidon__
@__Minecraft_Poseidon__ 2 жыл бұрын
Спасибо вам за уроки!
@stasmois8887
@stasmois8887 2 жыл бұрын
Здрастуйте, спасибо за понятное изложение информации! на пальцах как говорится) С юзкейсами и репозиториями в коине все понятно. Как использовать DataStore в koin? ViewModels без фабрик и пустым конструктором тоже в di? Ещё записался к вам на индивидуальные курсы, с нетерпением жду ответа.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Стараюсь всем отвечать, но уж очень много заявок, физически не успеваю всем быстро ответить.
@magzhannurbapa5303
@magzhannurbapa5303 2 жыл бұрын
Просто вау👍👍
@Woker2k20
@Woker2k20 2 жыл бұрын
Спасибо. Очень все понятно.
@MrLight363
@MrLight363 3 жыл бұрын
👍
@YulyaUlyanova
@YulyaUlyanova 2 жыл бұрын
Лучший!
@KO3Jlbl
@KO3Jlbl Жыл бұрын
Хороший комментарий.
@Стас-с4ю5т
@Стас-с4ю5т 3 жыл бұрын
"Это просто песня какая-то!" выглядит действительно как отличная замена через чур громозкого Dagger'а
@tequilaonelove
@tequilaonelove 2 жыл бұрын
Ага. Если только ваше приложение состоит из одного экрана и 1-го модуля ) Когда вы решите сделать многомодульное приложение, с десятками экранов, то это уже не будет выглядеть как отличная замена. Особенно когда начнёте получать ошибки предоставления зависимостей в рантайме, а не на момент компиляции кода =)
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Koin отлично живет в больших проектах. Ошибка рантайм - да, есть такое, но это обходится тестами, например у меня на большом проекте за несколько лет ни разу не вылезла такая ошибка в продакшене.
@alfa.voland
@alfa.voland 2 ай бұрын
какой-то хороший комментарий)))
@iharkryzheuski3468
@iharkryzheuski3468 10 ай бұрын
Класс
@karenbagratyan3280
@karenbagratyan3280 Жыл бұрын
spasibo ochen
@dmbezoar
@dmbezoar Жыл бұрын
Спасибо за видео! Во время моей работы с Koin, у меня возник вопрос. Ранее я уже работал с Dagger 2 и обычно хранить модуль вьюмодели на уровне компонента App там было не вполне нормально, для этого был ActivityComponent, а то и FragmentComponent, если ВМ привязана к одному фрагменту в сингл-активити приложении. Здесь получается все модули так или иначе будут обьявлены в App и подключить дополнительный Component c модулями в Активити или Фрагменте не выйдет. Или я ошибаюсь?
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Ошибаетесь. В Koin тоже можно делать отдельные компоненты для экранов или фичей и загружать/выгружать их по необходимости
@AndrewMatusevich
@AndrewMatusevich 11 ай бұрын
Хороший коментарий)
@leojoshiro
@leojoshiro 2 жыл бұрын
Здравствуйте Тимофей когда будет новое видео? мы ждем с нетерпением
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Вот вот, уже в процессе).
@MxMayers
@MxMayers 2 жыл бұрын
Замечательное видео спасибо огромное за разъяснение! 1:46 подскажите когда 50 UseCase их наверное как то делят по папкам? Я сейчас набросал в редакторе схем, получилось 9 UseCase мне их сразу раскладывать в папки к которым они логически относятся?
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Да, просто поделите папками и все.
@alfa.voland
@alfa.voland 2 ай бұрын
обязательный комментарий который я тут оставлю))
@АндрейФедоров-к1ч
@АндрейФедоров-к1ч Жыл бұрын
Спасибо, мне кажется хилт попроще будет)
@TimofeyKovalenko
@TimofeyKovalenko 8 ай бұрын
У всех свои плюсы есть, мне лично koin больше нравится)
@ДжузеппеЦаца
@ДжузеппеЦаца 2 жыл бұрын
оставляю хороший комментарий ;)
@Klimpton
@Klimpton Жыл бұрын
Здравствуйте, спасибо за такие отличные уроки, возникла проблема, что если ставлю androidLogger(Level.DEBUG) приложение крашит с непонятной ошибкой, но если поставить androidLogger(Level.NONE) то всё отлично работает, это же не нормально ?
@Juliet-z8z
@Juliet-z8z 10 ай бұрын
У меня та же ошибка, тоже не могу понять, почему ее выдает
@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?
@yoequilibrium6734
@yoequilibrium6734 Жыл бұрын
Для чего разделять Koin DI на отдельные модули App, Data, Domain, если они всё равно инициализируются в Application и подтягивают друг друга? Какое практическое применение такого разделения в реальных проектах (понятно,что здесь просто пример)? Или это в данном случае чисто для читаемости?
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
В реальном проекте зависимостей очень много, и часто разделяют даже на большее число модулей, что-бы читабельность была нормальная. Иначе будет полотно из кода на сотни строк
@Иван-е9о7т
@Иван-е9о7т 2 жыл бұрын
хороший комметарий
@СергейГаврилов-щ5у
@СергейГаврилов-щ5у Жыл бұрын
А возможно для полного понимания увидеть полный код? Просто не хочется ради одного кусочка видео, смотреть и вручную писать код со всего плэйлиста
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Видео так же использую и для студентов, поэтому код не выкладываю, иначе все просто копирнут, запустят и ничего не сделают сами ;).
@serg888fert4
@serg888fert4 2 жыл бұрын
Извините, я наверно прослушал. Не могу понять такую штуку. Получается два одинаковых класса User и UserName, и ещё name сохраняется через SaveUserNameParam. С другой стороны цель применения такой архитектуры - независимость частей кода. Разве не придётся делать изменения в этих трёх классах при изменении одного из них? И разве не сломается при этом приложение? Хотелось бы увидеть, при добавлении в класс User или UserName каких-то полей, приложение не ломается и требуется немного изменений. Спасибо, с уважением.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
В том то и суть, что каждый слой может добавить туда что-то, не затрагивая другие зависимости. Тоесть работает только со своим объектом. А если глобально что то нужно будет добавить, то да, нужно будет добавить на всех уровнять, точнее добавить поддержку в каждой из частей индивидуально.
@ra9ftm
@ra9ftm 2 жыл бұрын
Привет! Этот тестовый проект можете куда-нибудь выложить?
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Нет, иначе студенты потом сами это не пишут и результат не очень хороший :). Просто эти видео использую в том числе и для обучения.
@renheyzer5125
@renheyzer5125 3 жыл бұрын
Здравствуйте Тимофей, это не относится к теме данного видео, но все же у меня возник этот вопрос при создании многомодульного проекта. Вопрос заключается в следующем: В модуль какого типа ложить 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, и наследуешься от него. А потом у нас все фрагменты живут по принципу: И жнец и швец и на дуде игрец ))
@renheyzer5125
@renheyzer5125 3 жыл бұрын
Здравствуйте Тимофей, у меня возник к вам вопрос, совместимы ли Clean Architecture и библиотека для пагинации Paging 3? Я обучаюсь на андроид разработчика на языке Kotlin, и у меня возник этот вопрос, т.к. domain слой не должен быть зависим от сторонних библиотек, как я понимаю.
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Paging 3 это либа из androidx, в домене ее не должно быть. Поэтому тут нужно использовать свои объекты в домене и пейджинг использовать только на presentation. Я бы ее вообще не использовал, реализовать пейджинг задача не сложная и вполне можно обойтись своим кодом.
@Majjabee-np9nq
@Majjabee-np9nq 2 жыл бұрын
Its perfectly
@DarkWeret
@DarkWeret 2 жыл бұрын
Насколько хорошей практикой является хранить модули в простых файлах? Где-то видел, что модули хранят в объектах. Как лучше сделать?
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Для Koin вполне подходят файлы, это же по сути тот же статик будет только без объекта, нет необходимости именно object писать. И так и так можете делать.
@arsenthompson
@arsenthompson 2 жыл бұрын
Merci
@diskortdiskortov4730
@diskortdiskortov4730 2 жыл бұрын
У меня почему-то, если использовать андроид логгер, то приложение при запуске падает(
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Может там null у какой-то переменной, которую распечатываете или логгер совсем не логгер - проверьте правильный ли импорт. А так лучше скиньте текст ошибки, без этого невозможно помочь.
@mihailpalminschi
@mihailpalminschi 2 жыл бұрын
Тоже самое, import правильный
@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? Так же как в примере?
@ИванВасильевич-в9д
@ИванВасильевич-в9д 2 жыл бұрын
@@TimofeyKovalenko (опечатался, Logger). Да, верно, полностью копирую Ваш пример. Стоит закоментить строчку androidLogger(Level.Debug) (которая на 23:15) и все работает. Странно, может какой-то глюк AndroidStudio.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Хм, я думаю дело не в Logger. Из за этой строчки не должно падать, скорей всего проблема не здесь.
@paveln0366
@paveln0366 3 жыл бұрын
красава
@idnull8434
@idnull8434 2 жыл бұрын
А как koin будет жить в jetpac Compose
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Так же как и сейчас ;), или что вас смущает в сompose?
@idnull8434
@idnull8434 2 жыл бұрын
@@TimofeyKovalenko это тонкий намек на то что вы осветили лишь императивный ui в compose нужна udf архитектура. И Koin там чуть по другому работает. P. s. Хотелось бы увидеть просветление этой темы.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Да, сделаю такое видео).
@ДмитрийЛунин-ю5ц
@ДмитрийЛунин-ю5ц 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 2 жыл бұрын
Такая же беда, все как в видео, но крашится бесконечно.
@Juliet-z8z
@Juliet-z8z 10 ай бұрын
Попробуй поставить Level.None, тогда ничего не крашится.
@Juliet-z8z
@Juliet-z8z 10 ай бұрын
@@alexandralban5682 Попробуй поставить Level.None, тогда ничего не крашится.
@madmax_2994
@madmax_2994 3 жыл бұрын
Спасибо!
@abuiman5251
@abuiman5251 2 жыл бұрын
Спасибо!!
Dagger в Android на практике с MVVM
32:41
Тимофей Коваленко
Рет қаралды 18 М.
Уроки по Android Clean Architecture, слой DATA на практике
36:26
Тимофей Коваленко
Рет қаралды 29 М.
Good teacher wows kids with practical examples #shorts
00:32
I migliori trucchetti di Fabiosa
Рет қаралды 12 МЛН
Mom had to stand up for the whole family!❤️😍😁
00:39
小天使和小丑太会演了!#小丑#天使#家庭#搞笑
00:25
家庭搞笑日记
Рет қаралды 56 МЛН
Это было очень близко...
00:10
Аришнев
Рет қаралды 919 М.
Clean Architecture Android на практике - раздельные модели
34:07
Тимофей Коваленко
Рет қаралды 23 М.
Почему я вернулся на Dagger. Пока Koin
11:31
Android Broadcast. Все об Андроид разработке
Рет қаралды 10 М.
Dependency Injection, The Best Pattern
13:16
CodeAesthetic
Рет қаралды 848 М.
Hilt - лёгкий старт в Dagger
32:26
Android Broadcast. Все об Андроид разработке
Рет қаралды 14 М.
Шаблон MVVM по-простому + Android Architecture Components.
12:58
Мобильный разработчик | Юрий Петров
Рет қаралды 38 М.
Юнит тест для View Model в Android
26:57
Тимофей Коваленко
Рет қаралды 8 М.
Основы DI и Dagger, как работает, настройка в проекте
17:31
Android Broadcast. Все об Андроид разработке
Рет қаралды 67 М.
Why Koin? (RU)
25:38
Android Broadcast. Все об Андроид разработке
Рет қаралды 10 М.
Unit тестирование в Android c Clean architecture
21:09
Тимофей Коваленко
Рет қаралды 12 М.
Good teacher wows kids with practical examples #shorts
00:32
I migliori trucchetti di Fabiosa
Рет қаралды 12 МЛН