Clean Architecture Android на практике - применяем Use Case

  Рет қаралды 35,579

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

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

Күн бұрын

Пікірлер: 125
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Предыдущее видео с теорией про Use Case: kzbin.info/www/bejne/d6CWlWSIZrl2j8U СОДЕРЖАНИЕ: 00:00:00 - краткое содержание к видео 00:00:55 - Clean Architecture на диаграмме 00:04:57 - Чистая архитектура Android на практике с реальным примером 00:22:20 - краткий обзор выполненного примера на Kotlin 00:24:26 - подводим итоги
@AlexFromKiev
@AlexFromKiev Жыл бұрын
Ув. Тимофей! Вы - настоящий Профессор. Без шуток. Зашел в тупик с этими тремя слоями. Без них приложение работает, а с ними нет. Интуитивно искал то, что Вы преподнесли. Спасибо большое!
@MrOnlineCoder
@MrOnlineCoder 3 жыл бұрын
Я вообще бэкендер, но из за малого количества хороших уроков по чистой архитектуре, это видео очень помогло, спасибо)
@Arman_127
@Arman_127 2 жыл бұрын
Огромное спасибо. Вам реально дано объяснять сложные вещи простыми словами. Рад что наткнулся на ваш канал
@artlinestudio6735
@artlinestudio6735 8 ай бұрын
Большое, огромное спасибо за науку учитель. Очень интересно смотреть. Спасибо.
@jkronz
@jkronz Жыл бұрын
Спасибо огромное!! Как бы я жил без твоих видео без чистой архитектуре.
@ШарьярЕсемуратов-о4х
@ШарьярЕсемуратов-о4х 3 жыл бұрын
До этого я смотрел много видео , но после ваших видео я начал понимать что к чему, молодец ! Теперь скоро собираюсь купить ваш курс! Супер!
@speedrages
@speedrages Жыл бұрын
Благодарю, процветания каналу!
@KingDev6363
@KingDev6363 Жыл бұрын
Доброго времени суток! Уроки очень полезные, недавно только закончил курсы, но там мне не было понятно по clean Architecture. Сейчас, по вашим урокам заново перепрохожу и все доходчиво понятно. Спасибо огромное!!!🤝🥳
@GriNAME
@GriNAME 3 жыл бұрын
Просто огромнейшее человеческое спасибо! Очень полезные видео! Очень мне сейчас они помогают!
@89Razin
@89Razin Жыл бұрын
Наконец-то я нашел достойные уроки по архитектуре приложения!!!Спасибо Вам!!!❤
@МихаилАкулов-ю7ж
@МихаилАкулов-ю7ж Жыл бұрын
сходи в гости к Roman Andrushchenko, будет полезно.
@rudinandrey
@rudinandrey 3 жыл бұрын
очень очень хорошо объясняете. Не знаю почему это назвали чистой архитектурой )) но ладно. Но пожалуйста продолжайте тенденцию, как объяснять вещи вот таким вот образом. Такого в рускоязычном компьюнити мало на самом деле. Многие прям все заворачивают сразу в сложные конструкции, как будто так и надо. В англоязычном объясняют сначала на пальцах, типа Couter простейший, чтобы было понятно с чего все начинается. Вот в этом видео я вижу тоже самое и мне это очень нравится. Отличное видео. Спасибо!
@luckydevil1601
@luckydevil1601 2 жыл бұрын
я потому только на английском и смотрю. там намного проще рассказывают, и комьюнити менее токсичное. этот канал - первый русскоязычный канал, на который я зашла и не пожалела.
@bunnyrin
@bunnyrin Жыл бұрын
@@luckydevil1601 можете посоветовать хорошие каналы по Андроиду? Конечно. можно англоязычные) Знаю парочку, но всегда хочется узнавать еще больше от классных спецов.
@stasleonov5196
@stasleonov5196 2 жыл бұрын
Потрясающе просто о сложных вещах. Огромное спасибо вам за труд.
@chriswaytt6009
@chriswaytt6009 2 жыл бұрын
Больше уроков пожалуйста ) отлично обьясняете!!!
@senya_tall
@senya_tall Жыл бұрын
10:11 почему мы тут используем не data class ?
@arthurtargonsky9952
@arthurtargonsky9952 3 жыл бұрын
Спасибо! Очень ясно и доступно :)
@Revakovskyi
@Revakovskyi 2 жыл бұрын
Очень крутые уроки!!! Спасибо вам за детальное разъяснение!
@RomkinVideo
@RomkinVideo 2 жыл бұрын
Очень понятное видео. Прям я пока лучше не видел. Для чайников самое то! Спасибо!
@sovrinfo
@sovrinfo 3 жыл бұрын
Спасибо за видео.Коммент в поддержку!
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Спасибо)
@yourchoice2917
@yourchoice2917 5 ай бұрын
Подскажите пожалуйста есть аналогичные генераторы кода для котлин на примере как Bouml. То есть я реализовал диаграммы классов например а далее все это конвертировал в код. Важно чтобы это был ни какой ни будь плагин а как отдельная самостоятельна система.
@АлександрБугримов-о1е
@АлександрБугримов-о1е 3 жыл бұрын
Спасибо за видео! Очень круто
@kovshichek5933
@kovshichek5933 Жыл бұрын
Еще можно у UseCase классов вместо execute воспользоваться фишкой Kotlin, назвав метод invoke, тем самым переопределив вызывание через (), например UseCase()
@Relax-4-Relax
@Relax-4-Relax Ай бұрын
Добрый день У мнея маленький опый, пытаюсь понять что тут происходит . Скажите а вы можете както посмотреть мой код может сделать замечания ?
@KirillAndreevich-c9w
@KirillAndreevich-c9w 3 жыл бұрын
Ееееее, очень крутое видео, жду некст!)
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Продолжение уже доступно ;) kzbin.info/www/bejne/sKWTaJWFl66jic0
@kafychannel
@kafychannel 3 жыл бұрын
Видео крутое, информативно, голос приятный, большое спасибо. Какой у вас опыт в разработке под анлроид?
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Под андроид начал писать в 2011, почти 12 лет уже.
@yura.kuznetsov
@yura.kuznetsov 2 жыл бұрын
Ранее работал в Android Studio, ваши уроки проходят в IntelliJ IDEA. Может есть инструкция, как правильно подключить Genymotion к этой среде разработки?
@annadanilenko3600
@annadanilenko3600 2 жыл бұрын
Спасибо большое, Тимофей! Все сверх понятно!
@denissavast
@denissavast Жыл бұрын
Благожарю за отличный материал !
@ohjelmistokehittaja4446
@ohjelmistokehittaja4446 3 жыл бұрын
Отличный материал. Были бы ещё strarter/final проекты c кодом, как почти у всех остальных, было бы круто.
@romanstirskyi
@romanstirskyi 3 жыл бұрын
Очень все понятно! Спасибо!
@dervanowsky
@dervanowsky 3 жыл бұрын
класс! смотрим остальные уроки!
@AkramAzizmurodov
@AkramAzizmurodov 3 жыл бұрын
Огромное спасибо Тимофей! Мне очень нравится. Пожалуйста, делайте видео о Room SQLite.
@MxMayers
@MxMayers 3 жыл бұрын
Отличное видео спасибо! Подскажите как человек работающий в Android Studio уже долго (я полагаю) если у меня класс состоит из 10ти полей допустим класс "фильма" как в андройд студии настроить так что бы при печатании названии класса (при создании где нибудь переменной) что бы он автоматически вставлял все эти поля типа: val film = Film(title=,year=, genre=,actors= .... ) а не пустой класс Film() то есть что бы не приходилось вбивать 10 полей вручную. Это как нибудь настраивается? все разрбрался плагин для студии "Kotlin Function Arguments Helper"!
@speedrages
@speedrages Жыл бұрын
Вопрос: если юзкейс представляет собой гет запрос к апи, и в этом запросе есть параметр @Path который может меняться, то нужно ли создавать три юзкейса под каждый возможный path или можно через параметры в execute передавать?
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Это не верный вопрос. Создавая юз кейсы вы не должны опираться на API. Вы создаете юз кейсы из необходимости в том или ином функционале, а уже затем смотрите, какие API и как нужно вызвать. То есть это вы решаете, какие юз кейсы создать, а не бекенд разработчик, который создал для вас API. Но добавлю пример, что-бы прояснить конкретно ваш вопрос: зависит от того, что вы отсылаете в @Path и относится ли это к одному функционалу. Например, если через @Path вы делаете поиск данных или фильтрацию, то тут понятное дело будет один юз кейс. А если через @Path вы получаете 3 совершенно разные функциональности, то есть по хорошему это должно быть 3-мя разными API, то тут логично разделить это на разные юз кейсы.
@hackim2554
@hackim2554 3 жыл бұрын
Благодаря вашему видео я начал изучать Kotlin. Хотелось бы увидеть реализацию на java. Может дальше есть, пока что смотрю лишь второй урок. Но даже не зная Kotlin, смог написать подобный ваше реализации код на Java
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Сейчас уже все на Kotlin на Android, поэтому реализации на Java не будет (.
@motohiker3435
@motohiker3435 2 жыл бұрын
Я так понял, что „Clean Architecture“ это не есть альтернатива патерну MVVM. Скажите пожалуйста. Если использовать совместно с MVVM то нужно каждый Use Case в отдельный класс ViewModel выносить?
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Конечно не альтернатива, задачи у них совершенно разные. Каждый Use Case в отдельный класс ViewModel выносить не нужно. ViewModel контролирует состояние конкретного экрана или части экрана, сколько там юз кейсов нужно, столько и подключайте.
@motohiker3435
@motohiker3435 2 жыл бұрын
@@TimofeyKovalenko благодарю
@codemachine19
@codemachine19 2 жыл бұрын
Очень понятно объясняешь, спасибо за урок
@oleg12395
@oleg12395 2 жыл бұрын
Скажите пожалуйста, а логика кнопок копировать, вставить и поделиться где Клин архитектуре должна быть размещена ? У меня сейчас в майн активити. Или надо бы ее по юс кейсам распихать ?
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Domain не может содержать платформенно зависимые вещи, то есть в домене вы такое размещать нельзя. Идеальнее всего пробрасывать это в ViewModel, которая дальше раздаст нужные команды что делать.
@курбанбекАтанбай
@курбанбекАтанбай 2 жыл бұрын
можно ваш телеграмм, у меня есть несколько вопросов ?
@spam397
@spam397 2 жыл бұрын
А модельки тоже надо было в диаграмме делать ? Или это не важно ?
@АлександрРоманов-р5ф
@АлександрРоманов-р5ф 3 жыл бұрын
Спасибо за видео!!!! Очень хорошо объясняете!
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
😉
@OCEH6
@OCEH6 2 жыл бұрын
Видео огонь! Спасибо!
@AndrewMatusevich
@AndrewMatusevich Жыл бұрын
Больше спасибо!
@DenisBezrukov-jr1tp
@DenisBezrukov-jr1tp 10 ай бұрын
Я тоже бэкендер. Не знаю почему, у нас большинстве случаев топят за 3х слойную архитектуру. Хотя в ней есть много минусов. Поэтому тоже было интересно посмотреть как в андройде вы используете Clean Architecture и подобное. По поводу SOLID. DIP - игнорируется в вашем случае для useCase. По хорошему через интерфейс стоит их сделать, как считаете? Как минимум для мок тестирования? Я бы так сильно не придирался, но вы сами упомянули solid))
@MajorTom-r6s
@MajorTom-r6s 10 ай бұрын
Т.е. вы предлагаете сделать интерфейс, в нём объявить один метод execute и имплементить его в каждом UseCase? Я просто сам начинающий только, и хочу убедиться, что правильно вас понял)
@DenisBezrukov-jr1tp
@DenisBezrukov-jr1tp 10 ай бұрын
@@MajorTom-r6s Да всё, верно. Плюсом мы получаем то, что интерфейс ещё и функциональным становиться. Ну и для написания тестов мы сможем "мокать" наши интерфейсы.
@TimofeyKovalenko
@TimofeyKovalenko 10 ай бұрын
Да, по хорошему нужно делать с интерфейсом, но это часто избыточно, а моки и без интерфейса будут работать.
@TimofeyKovalenko
@TimofeyKovalenko 10 ай бұрын
За 3 слойную топят потому что, это с одной стороны достаточно просто, а с другой позволяет обезопасить код от менее опытных разработчиков. Плюс эта архитектура понятна подавляющему числу разработчиков, не нужно лишний раз вникать в новый проект.
@samuilzhumakhanov6056
@samuilzhumakhanov6056 3 жыл бұрын
Все просто и понятно, спасибо!
@berspoland5667
@berspoland5667 2 жыл бұрын
Подскажите Тимофей, а следует ли нам наши модельки также на диаграмку набрасать?! Если да, то как это более понятно и стандартизировано должно выглядеть?! Спасибо.
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Обычно это не делают, так как получиться очень уж большая диаграмма.
@antonselitskiy8143
@antonselitskiy8143 3 жыл бұрын
Так всё же - а когда будем проходить Room? Не совсем понятно как без интерфейсов будет выглядеть управление через UseCase
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
А причем тут UseCase к Room? UseCase ничего не знает про то как и откуда получаем данные(как правило не знает). Room пройдем но буквально чуть чуть, я все же считаю это сильно простой темой, и не хочется на нее много времени уделять.
@_Iovan_
@_Iovan_ 3 жыл бұрын
Спасибо за видео, супер доходчиво! На просторах гугла вычитал что UseCase === Interactor, так ли это?
@ЕвгенийМинаенков-х8е
@ЕвгенийМинаенков-х8е 3 жыл бұрын
Я просто в восторге. Очень подробно!
@ЮкаРазраб
@ЮкаРазраб Жыл бұрын
Полезное видео, спасибо
@berspoland5667
@berspoland5667 2 жыл бұрын
А модельки должны только общую информацию содержать или внутри правильнот иметь содержания какой-то доп. логики?! Или же если это доп логика то как-то выносится в абстракцию?!
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Модельки лучше держать чистыми без какой-либо логики.
@НазарРадванецький-л5л
@НазарРадванецький-л5л Жыл бұрын
Супер бомба 🎉
@КахарманБалтабаев-б2о
@КахарманБалтабаев-б2о 3 жыл бұрын
Отличный урок!!!!
@ivan.legenda
@ivan.legenda 2 жыл бұрын
Однозначно лайк и подписка )))
@ВладСизых-ю5ж
@ВладСизых-ю5ж Жыл бұрын
чувак, как же ты крут
@olegkovalenko5708
@olegkovalenko5708 2 жыл бұрын
Спасибо большое за труды
@ЕвгенийМоскаленко-у9щ
@ЕвгенийМоскаленко-у9щ 3 жыл бұрын
Можно ли UseCase с Mapper как то использовать? Ведь не всегда нужно использовать все данные которые приходят с сервера/бд. Спасибо
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
В UseCase мапперы не нужны, все ненужное можно обрезать еще в data слое, в момент когда делаете маппинг в domain модели.
@jarjaju9524
@jarjaju9524 Жыл бұрын
Можно ли модели делать на абстрактных классах?
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Технически можно, но зачем так усложнять все?
@devit4910
@devit4910 2 жыл бұрын
Спасибо за урок! Есть вопрос, у меня при создании package usecase, когда я хотел поместить его в package domain, получалось вместо отдельных пакетов один общий. Тоесть, грубо говоря, такой результат - domain.usecase и я сюда уже use case помещал свои. Это ведь неправильно, можете подсказать в чём может быть проблема?)
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Это просто Android Studio так отображает, если пакеты пустые то склеивает вместе, в настройках можно поменять.
@devit4910
@devit4910 2 жыл бұрын
@@TimofeyKovalenko подскажите, а как это поменять, чтобы сделать как у вас в уроке?)
@devit4910
@devit4910 2 жыл бұрын
может кому будет полезно, compact middle packages нужно убрать галочку. нужно нажать на шестерёнку, прямо над project
@Majjabee-np9nq
@Majjabee-np9nq 3 жыл бұрын
Я с помощью твоих видосов только начал понимать, что такое клин архитектура.
@dopamine5071
@dopamine5071 3 жыл бұрын
А почему models располагаете в domain, а не в data-слое?
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Потому, что там им и место. Посмотрите подробнее диаграмму, если модель будет в дата, то как с ней работать юз кейсам?
@MarchenkoAnton
@MarchenkoAnton 3 жыл бұрын
А могут один и тот же UseCase использовать к примеру два или более активити?
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Конечно можно.
@АлександрПурышев-б5щ
@АлександрПурышев-б5щ 2 жыл бұрын
Для SaveUserNameUseCase я бы использовал data class. Так как он больше подходит под логику временного сохранения в памяти, как мне кажется.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Да, но если вы не используете методы, которые создает дата класс, то нет никакого смысла его использовать. Например, в видео про юнит тесты, мы меняем их на дата класс, потому, что нам нужно сравнивать объекты. Но в задаче данного видео, нам дата класс не нужны. Я бы рекомендовал никогда не делать лишний код из расчета, что когда-то понадобится, лучше делать все по факту, иначе будет копиться не нужны мусор.
@Андрей-в4й6л
@Андрей-в4й6л 3 жыл бұрын
Спасибо за видео!
@konstantinmezler5238
@konstantinmezler5238 2 ай бұрын
Спасибо все понятно
@ЕленаМ-о7щ
@ЕленаМ-о7щ 3 жыл бұрын
Мега спасибо!
@papirka33
@papirka33 Жыл бұрын
entities и models это одно и то же?
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Можно сказать, что одно и тоже, сейчас эти понятие смешались, но entities изначально были моделями для базы данных именно
@ArtemSamoshkin
@ArtemSamoshkin Жыл бұрын
Благодарю!
@MentorOfMentors
@MentorOfMentors 10 ай бұрын
Сейчас уже пишут Data Domain Ui
@TimofeyKovalenko
@TimofeyKovalenko 10 ай бұрын
Ну.. пусть пишут ;)
@АлександрГлебов-х4я
@АлександрГлебов-х4я 2 жыл бұрын
Насчёт 10 use case в активити(фрагменте) не совсем согласен. Я в своём рабочем проекте использовал Interactor класс, как фасад над несколькими логически взаимосвязанными use case. За счёт этого уменьшается размер конструктора ViewModel твоего активити(фрагмента) и код становится чище и понятнее.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Да это хороший вариант.
@Мах-в2п
@Мах-в2п 2 жыл бұрын
Супер!
@cinderellarouge
@cinderellarouge 3 жыл бұрын
Вы такой классный!!!
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Спасибо))).
@motohiker3435
@motohiker3435 2 жыл бұрын
Благодарю
@АлександрКар-з9ш
@АлександрКар-з9ш Жыл бұрын
Видео классные, многое становится понятно. Но объяснять конечно clean architecture начинающим разработчикам сомнительное удовольствие 😂
@TimofeyKovalenko
@TimofeyKovalenko Жыл бұрын
Такие уж времена, если не объяснить, то сожрут студента на собеседовании ;)))
@mikhailgureev218
@mikhailgureev218 3 жыл бұрын
Спасибо большое
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Незачно)
@break8090
@break8090 3 жыл бұрын
Спасибо
@marknoyanzin6108
@marknoyanzin6108 2 жыл бұрын
Если я правильно понимаю, в Activity не должно быть никакой логики, а выражение типа dataTextView.text = "${userName.firstName} ${userName.lastName}" и dataTextView.text = "Save result: $result" это же уже логика? Я делаю все в C#. Если бы я это делал в C#, то я бы переопределил методы ToString в UseCase и ничего в Activities не выносил из логики. И ещё. Пример корявый. Вводим одни данные, а получаем совершенно не в тему данные. Хотя общий смысл ясен более менее. Можно было продумать пример, конечно, получше.
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Да, все верно. Но мы еще в этом видео не дошли до создания ViewModel ;). В этом видео показываю общую концепцию, детали презентации разбираем в следующих видео, уже выложены на канале.
@ddsdcww434-wi4fo
@ddsdcww434-wi4fo 3 жыл бұрын
класс SaveUserNameParam назван странно( Просто UserNameParam нужно
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
Это что-бы более четко понимать для чего он, так как юз кейсов связанных с UserName несколько.
@ddsdcww434-wi4fo
@ddsdcww434-wi4fo 3 жыл бұрын
​@@TimofeyKovalenko все равно не убедили. Убирать Save(к тому же это "Save" - это действие, а имя класса лучше начинать с существительного)
@TimofeyKovalenko
@TimofeyKovalenko 3 жыл бұрын
😉
@tpov_oleg
@tpov_oleg 2 жыл бұрын
У меня например в активити 50 функций, да мне проще будет разобраться в коду, чем щелкать эти юзкейсы и открывать. Жесть
@TimofeyKovalenko
@TimofeyKovalenko 2 жыл бұрын
Тебе, да. Но не след. разработчикам, которым придется утопать в этом коде)
@armangukasian
@armangukasian 3 жыл бұрын
спасибо большое, отлично передана информация!)
@Ucozar
@Ucozar 3 жыл бұрын
Спасибо!
@Silveryization
@Silveryization 11 ай бұрын
Спасибо
@muhammadkurbonov4779
@muhammadkurbonov4779 7 ай бұрын
Спасибо большое
Уроки по Android Clean Architecture, слой DATA на практике
36:26
Тимофей Коваленко
Рет қаралды 30 М.
Clean Architecture Android на практике - раздельные модели
34:07
Тимофей Коваленко
Рет қаралды 24 М.
“Don’t stop the chances.”
00:44
ISSEI / いっせい
Рет қаралды 62 МЛН
Леон киллер и Оля Полякова 😹
00:42
Канал Смеха
Рет қаралды 4,7 МЛН
Архитектура Go проекта на практике
30:09
Evrone Development
Рет қаралды 19 М.
Koin в Android на практике c MVVM
28:08
Тимофей Коваленко
Рет қаралды 24 М.
Все про Dagger Hilt в Android Studio + Kotlin
52:11
Neco Ru
Рет қаралды 14 М.
Зачем нужна многомодульная архитектура. Плюсы и минусы
10:59
Android Broadcast. Все об Андроид разработке
Рет қаралды 12 М.
Как стать ЛУЧШИМ тестировщиком: от учителя до QA-инженера в Т-Банк
1:14:20
Руслан Масленников | Подкаст "экcпириенс"
Рет қаралды 18 М.
Модули в Android Clean Architecture на практике
20:57
Тимофей Коваленко
Рет қаралды 26 М.
Что такое сценарий использования (Use Case)
15:17