Идеальная архитектура. Чем отличается UseCase от Interactor? / Мобильный разработчик

Поділитися
Вставка
  • Опубліковано 13 чер 2024
  • Всем привет, меня очень часто спрашивают как сделать "идеальную архитектуру", что такое "идеальная архитектура" и так далее. Чем UseCase отличается от Interactor? Когда нужно пилить интерфейсы, когда не нужно, когда нужно делить на фиче модули, а когда нет.
    На все эти и не только вопросы я решил дать ответ в этом видео!
    00:00:00 - Всем привет
    00:00:50 - Главное правило для любой архитектуры
    00:02:50 - Про UI компоненты
    00:07:00 - Clean Architecture
    00:09:24 - Data Source
    00:11:07 - Repositories
    00:15:10 - Use Case
    00:17:00 - Interactor
    00:17:18 - Итог всего вышесказанного
    00:20:34 - Всем пока
    Если вам понравилось видео, то поддержать канал и получить доступ к эксклюзивному контенту можно подписавшись на Boosty
    ===========================================
    Поддержать канал на Boosty - boosty.to/mobiledev
    ===========================================
    Полезные статьи из мира мобильной разработки
    Яндекс.Дзен - zen.yandex.ru/id/5e4aa0a9f2b9...
    Teletype - teletype.in/@alexgladkov
    Мобильный разработчик в других соц. сетях
    =======================
    Вконтакте - mdeveloper
    Телеграм - t.me/mobiledevnews
    =======================
    Если ты прочитал это - напиши коммент! Тест на внимательность :D

КОМЕНТАРІ • 138

  • @user-yg6fe2bs9u
    @user-yg6fe2bs9u 2 роки тому +5

    Лучший видос про архитектуры! Большое спасибо)

  • @user-bh9rn9wb6b
    @user-bh9rn9wb6b 3 місяці тому

    Один из лучших каналов для Android разработчика. Четко! Понятно! Без лишней воды! Алексею большое спасибо!

  • @olegbeloy9279
    @olegbeloy9279 2 роки тому +16

    Хорошее видео для общего понимания
    Я бы не привязывался к количеству строк в классе для разбиения. Главный принцип здесь - SRP.
    Если есть решение у команды использовать clean architecture, юз кейсы - будь добр использовать это во всех вью моделях и не тратить свои и ревьювера ментальные ресурсы на принятие решения.
    Потом класс разрастается и что - надо рефакторить, тесты переписывать. Проще изначально сделать правильно

  • @azamat0180
    @azamat0180 2 роки тому

    Спасибо вам большое,Алексей!

  • @kafychannel
    @kafychannel 2 роки тому +1

    спасибо за видео , было очень познавательно

  • @senk0n
    @senk0n 2 роки тому +5

    18:34 - SUS
    А вообще спасибо за ролик, многим начинающим и не только будет полезно. Коротко и без избыточного углубления в тему 👌

  • @danilastepanov108
    @danilastepanov108 Рік тому

    Очень, очень годное видео! Спасибо)

  • @andk6893
    @andk6893 2 місяці тому

    Очень полезное видео, просто бальзам на душу! )

  • @Anadol777
    @Anadol777 10 місяців тому

    Ультра полезное видео, спасибо!

  • @indiedistortion9986
    @indiedistortion9986 Рік тому

    как же божественно запилил!

  • @user-cl6gb6rg8f
    @user-cl6gb6rg8f Рік тому

    Блин, очень классно, спасибо большое 🙏🙏🙏

  • @amiakari7700
    @amiakari7700 15 днів тому

    Спасибо за видео!

  • @illyaevseev312
    @illyaevseev312 2 роки тому +7

    По поводу выбора архитектуры я всегда вспоминаю одно наше приложение. В один прекрасный момент один наш постоянный клиент просит нас написать приложение-логинилку. Т.е. ты сканируешь QR код, отправляешь запрос на бэк и происходит какое-то действие. Например логин в системе или открытие электронного замка. Не вопрос. Я пишу его за пару дней и мы довольные расходимся. Проходит немного времени и выясняется, что нужно еще показывать статистику приходов на работу после логина. Запросто. А потом менеджеры очень запросили выводить статистику по процессам. И каждый раз звучало что-то из серии "вот это вот и все". Примерно первый год. Сейчас это CRM с SIP телефонией, чатами и целой кучей функционала. Изначально я закладывал архитектуру с избытком по отношению к функционалу. Как же сильно я в тот момент ошибался ;)

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +1

      Интересная история 😀 но выглядит, что как раз в этой ситуации избыточность могла вас спасти )

    • @illyaevseev312
      @illyaevseev312 2 роки тому +2

      @@MobileDeveloper Так я ведь тогда был абсолютно уверен, что перестраховался по полной. Хотя оказалось, что даже не начал страховаться.

  • @MrKizup
    @MrKizup 2 роки тому +1

    Сразу видно, что видос прям о наболевшем) Еще бы это донести до тех аутсорс компаний, которые делают приложения и забывают про них, но надо обязательно упороться в "архитектуру", написать кучу лишнего и ненужного, чисто для того, чтобы показать мол видали, мы пишем "правильно"

  • @ksander4386
    @ksander4386 Рік тому

    Лучшее объяснение про архитектуру

  • @sovrinfo
    @sovrinfo Рік тому

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

  • @asp424
    @asp424 2 роки тому +1

    Спасибо! Вы супер!

  • @user-uj4qx2wi8n
    @user-uj4qx2wi8n Рік тому

    Скажите, пожалуйста, по поводу тестового задания для джуна. Если задание стандартное вроде 2х экранов список + детали, то делать всё по clean(слои, интерфейсы, мапперы) - это в плюс идет или в минус?

  • @uservhhrXdgko1234
    @uservhhrXdgko1234 2 роки тому +6

    самый часто нарушаемый принцип, это принцип KISS
    Алексей правильные вещи говорит! Не усложняйте лишний раз.

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +1

      Збазибо)

    • @dmitriykhalturin4918
      @dmitriykhalturin4918 2 роки тому

      КИСС мой любимый принцип!!!

    • @aleksandrvolkov4310
      @aleksandrvolkov4310 2 роки тому +1

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

    • @pavelkopytin
      @pavelkopytin 2 роки тому +2

      @@aleksandrvolkov4310 Надо понять одно, автор просто забыл упомянуть, архитектура приложения это ни что-то незыблемое, а она так же должна развиваться с ростом проекта. Как пример, на другом канале рассказали про правило трех, когда у вас есть какой-нибудь метод в одном месте, вы можете смело его скопировать в другое, может слегка изменить. Но вот если это приходится делать в третий раз - это повод задуматься о выделении данного метода в отдельный класс и переиспользовании. Архитектура - это живая сущность, растет вместе с проектом и должна отвечать только тем требованиям, которые существуют на данном этапе.

  • @mr-re1ax
    @mr-re1ax Рік тому +1

    Спасииииибо! Мне за 5 лет уже начало казаться что я единственный человек который это понимает😢

  • @lonely86boy
    @lonely86boy Рік тому

    Отличное видео, даже для немного опытных!
    Когда включился свет на заднем фоне - немного испугался, потом увидел девушку - стало полегче

  • @pavelkorolevxyz
    @pavelkorolevxyz 2 роки тому +7

    Поддерживаю мысль что нужно делать только то что нужно, а что не нужно не делать)
    Но с примером 19:08 когда отдельные модули делать не совсем согласен, в большинстве случаев над модулями начинают думать не когда команды параллельные есть, а когда твой монолитный модуль собирается минуту+ и это всех начинает напрягать. Главная их фича в том что и инкрементальный и клин билды намного предсказуемее работают, из-за чего проект можно скейлить и параллелить (А проблемы со временем сборки начинаются очень быстро, даже каких-нибудь 100к строк кода с каптом уже достаточно чтобы начать их ощущать). Так что это скорее про грэдл и котлин, и то как они устроены, а не про команду.
    И даже более того, если "эта параллельная фича тима" будет просто жить в отдельном модуле без правильного контракта, то она зааффектит сборку гораздо сильнее чем если бы они писали всё в том же монолите, потому что перед монолитом теперь надо их модуль целиком собрать. Я бы тут сказал скорее "не лезте создавать модули если не понимаете к каким последствиям это приведёт, лучше монолит чем плохая модуляризация".

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому

      Как правило если у вас этот модуль уже собирается по 30 минут, то фича команды прям уже за углом )

    • @immortal_lnight
      @immortal_lnight 2 роки тому

      У меня раньше был древнеримский ноутбук (6 ОЗУ), который проект на 2 экрана собирал 40 минут)))

    • @kirsan2353
      @kirsan2353 Рік тому

      @@maxhuman5898 А если очень хочется пощупать, и есть свободное время?

  • @user-ii9xe4pu6x
    @user-ii9xe4pu6x Рік тому

    Алексей, привет! А что-нибудь про микросервисы ты собираешься рассказывать? Был опыт?

  • @hazye8801
    @hazye8801 2 роки тому

    Добрый день, когда ожидать видео про написание клиентской части playzone?

  • @thunderdoge
    @thunderdoge 2 роки тому +22

    От себя ещё накину, что любые правила, типа "если класс занимает больше N строк, то его нужно разбивать" конечно стоит держать в голове, но действовать все равно по ситуации. Если ваш класс хорошо согласован, не делает ничего лишнего, то пусть он занимает хоть 800 строк, вполне может быть так, что от разбиения код станет только запутаннее.

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +1

      Ну в целом, да, но мы прям в линтере прописали эти правила и пока довольны )

    • @mironoff2007
      @mironoff2007 Рік тому

      800 строк это с учетом пустых строк, скобок закрытия и тд? А то бывает и презентер на 5к строк

    • @Doctor.Livesey
      @Doctor.Livesey Рік тому

      Делал сложный компонент на JavaScript. Вот там 1000 строк было примерно.

  • @temurisroilov5847
    @temurisroilov5847 2 роки тому

    Топ контент: 🔥

  • @pawsanimation
    @pawsanimation Рік тому +1

    Я дед Евгений, внук установил мне язык программирования, я вхожу в Айти благодаря всем вам

  • @alexandersmirnov4274
    @alexandersmirnov4274 Рік тому +1

    что такое ентити зачем они нужны и чем отличаются от доменных моделей?

  • @aung.95chit7
    @aung.95chit7 2 роки тому

    Happy birthday, God blessing you.

  • @alexrbh9515
    @alexrbh9515 2 місяці тому +1

    Лайк! Но про 600 строк хз, как по мне это слишком много для андроид проекта. Уже после 300-400 возникает чувство что что-то не так и SOLID где то умирает в сторонке)

  • @user-zi2sl7jh3t
    @user-zi2sl7jh3t 2 роки тому

    ТОП ! Видео ТОП !

  • @kafychannel
    @kafychannel 2 роки тому +1

    14:04 а что если есть бизнес логика отображать моментально на юай обновление Вьюхи после действия юзера , результат выполнения которого требует времени (запрос в сетку) , то здесь как по мне идеально подойдёт вложенный интерактор в другой интерактор, отвечающий за запрос в реальную сетку.

  • @orangebytheway
    @orangebytheway 2 роки тому

    Привет, как тебе идея позвать на видео или стрим кого-нибудь из команды Language Design, и поговорить с ним о будущих дизайн фичах котлина, чем они сейчас занимаются, над чем больше всего работают и тд. Я думаю это будет оочень интересно

  • @kafychannel
    @kafychannel 2 роки тому +1

    9:54 а как же тестирование наших датасорсов, подмена реализации. может быть, на одном скрине нам нужно сохранять данные A , а на другом мы хотим сохранять данные B . Вы предлагаете скопипастить DataSource для сохранения A , чтобы создать DataSource для хранения B ? тогда нарушается DRY . или нам нужно перед сохранением данных B удалять данные A , тогда это можно решить паттерном декоратор))

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +1

      Я говорю про тёплое, а вы про мягкое
      Если нужно подменить это вопрос интерфейса, а не количества датасорсов.
      Про интерфейс там дальше будет

  • @OverNoobDmg
    @OverNoobDmg 2 роки тому +1

    Благодарю за видео. Единственное не понял почему плохо, чтобы юз кейс использовал другой юз кейс. Например я в приложении работаю на одном экране со списком сущностей1, а на втором экране со списком сущностей2. Сущность1 хранит в себе список сущностей2. Сущность2 хранить в себе список сущностей3. Если использовать в юз кейс только репозитории, то возникает дублирование кода при сборке сущности2.

    • @ulmaxy
      @ulmaxy Рік тому +1

      Горизонтальные зависимости плохи тем, что сегодня мы в UseCase1 добавляем зависимость от UseCase2 и у нас все вроде ок, а завтра оказывается что нам в UseCase2 нужна зависимость от UseCase1, и вот мы уже не можем пользоваться inject конструкторами даггера, потому что появляется циклическая зависимость (т.к. мы не хотим иметь несколько инстансов одного и того же юзкейса).
      В вашем случае если сборка сущности2 слишком сложная, то можно ее вынести в какой-нибудь отдельный делегат, и его инжектить в каждый юзкейс

  • @diatm1506
    @diatm1506 4 місяці тому

    Немного не понятно в мобильной разработке. Нашёл круг A Comparison of Popular Flutter App Architectures (ui, web, db, external, interfaces, devices) внутри (controllers, gateways, presenters) внутри (use cases, entity) чем это связано с application layer (presentation, business logic, data access) и MVC, MVP, MVVM? В вебе всё делится на front end например angular(module->component->service->rest api) и back end например nest js (http request->controller->dto->service->dto->repository->entity->db) если не брать (Firebase как альтернативу) , а в мобилах всё вместе нету разделения на front и back? Ну хотя смотря какой вид рендеринга CSR(spa), SSR, SSG, LSR, RSC

    • @diatm1506
      @diatm1506 4 місяці тому

      О нашёл ios, swift clean arhitecture with MVVM
      Ui (view) , View model - presentation layer (MVVM)
      UseCase, interactor, entity - domain layer (business logic)
      Repository, data source, api/storage service - data layer (data repositories)

  • @zoompartyru
    @zoompartyru 2 роки тому

    Видео здравого смысла!

  • @user-zg3yu9xy6l
    @user-zg3yu9xy6l 2 роки тому +1

    Интересное видео. У себя пришел к тому, что в 80% случаев в MVVM мне требовались только репозитории и в 20% - usecases к ним. Причем логика в usecase очень хорошо выделяется в процессе развития проекта, и изначально их плодить на каждый чих точно не стоит. Но не совсем согласен с запретом использования одного usecase из другого (горизонтальные зависимости) - если у них адекватное именование и взаимодействие внутри usecase логично и понятно, считаю, что не зачем городить еще один уровень абстракции создавая Interactor.

  • @dmitrygus1631
    @dmitrygus1631 7 місяців тому

    В сервисе используется postgres, redis, clichouse, rabbitMQ. Сколько должно быть dataSources? Не выдумка, реальный сервис - часть большого проекта.

  • @triihart
    @triihart 4 місяці тому

    8:30 жертвуем увеличением количества кода. на клине приходится писать в разы больше и код под задачу будет размазан по нескольким файлам, а не по одному

  • @VINNY94051
    @VINNY94051 Рік тому +1

    Делай как удобно, кажется это основной посыл видоса, мне например нравится закрывать классы интерфейсами (не все подряд очевидно) но если закрывать условную репу интерфейсом, так проще ориентироваться что есть внутри нее, просто почитал контракт с репой и погнал ее использовать (про многомодульность и тестирование тут не говорю)

    • @MobileDeveloper
      @MobileDeveloper  Рік тому

      Скорее посыл видео, что не надо плодить лишних сущностей без необходимости

  • @dmitriimitryaev6508
    @dmitriimitryaev6508 24 дні тому

    чел ты хорош

  • @user-ms1yy5mk2t
    @user-ms1yy5mk2t 2 роки тому +3

    Про интерактор, мне кажется стоит обратиться к первоисточнику ua-cam.com/video/Nsjsiz2A9mg/v-deo.html. Потому что ваше объяснение ему не соответствует и только путает. Поправьте, если я что-то не знаю про Viper, но насколько мне известно, то там интерактор имеет абсолютно тоже значение что и в clean architecture. Интерактор - это объект реализующий сценарий использования.

    • @pavelkopytin
      @pavelkopytin 2 роки тому +2

      абсолютно тоже самое и думал, интерактор это и есть юзкейс

  • @user-zs4es8gj4p
    @user-zs4es8gj4p Рік тому

    Пол слова знающего человека могут стоить многих дней поисков.

  • @olegleonov1310
    @olegleonov1310 2 роки тому +3

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

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +4

      Кто бы ещё писал эти тесты

    • @olegleonov1310
      @olegleonov1310 2 роки тому

      @@MobileDeveloper На последних двух работах всегда пишем) В SberDevice, Epam.

    • @dmitriykhalturin4918
      @dmitriykhalturin4918 2 роки тому

      @@MobileDeveloper ))))) на сто 46 % согласен

  • @RareScrap
    @RareScrap 2 роки тому +1

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

  • @matjon_dev
    @matjon_dev 2 роки тому

    Нужно ли делать датасоурс, репоситорий для тестовых заданий, если даже 2-3 екрана и простая логика?

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +3

      Нет, если только это не цель задания

    • @aleksandrvolkov4310
      @aleksandrvolkov4310 2 роки тому +2

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

    • @devkonst
      @devkonst 2 місяці тому

      Конечно, ведь цель тестового задания показать свои знания, а для проверяющего - оценить их. Любой профессионал скажет - что оверкодинг для тестового задания это отлично. Конечно же обе стороны должны понимать для чего это сделано.

  • @user-df8xo5kw2p
    @user-df8xo5kw2p 2 роки тому +4

    Круто, согласен полностью и обеbми руками, ногами за каждое слово. Но только вот, еще бы на собесах от Junior не требовали бы clean architecture. Я конечно понимаю, что Junior должен хотя бы представлять, что это такое и на проекте не донимать вопросами дядей Seniors, что это такое и зачем. Но блин порой из-за дефицита кадров(Или жадности работодателей, все хотят за дешево спеца и сразу "херак-херак" продакшен) реально на позицию junior ищут midlle. И в итоге начинают делать pet проекты на 1-2 экрана с clean archeteture. Дабы показать, что они её знают, хотя она там нафиг не уперлась. Да и пониманию её, это ну ни разу не способствует:(

    • @awkwardquestion8643
      @awkwardquestion8643 Рік тому

      Я думал сейчас от джунов такое по дефолту уже требуется

  • @TamimProduction
    @TamimProduction 2 роки тому

    А если у нас слишком сложная модель, которая например в себе содержает много данных и отношения к другим моделям, как с этим быть если дата сорс не может зависит от другого? Раньше у нас были разные репы для каждого из этих моделей, каждый раз тебе нужно хранить 1 модель тебе нужно зависит от кучу реп, и в некоторых местах эта логика повторялась, и пришлось добавить хелпер чтобы не копи пастить код, и с этим все у нас появилась проблема с консистентностью даннах. Мы решили что репа будет отвечать за главную модель, дата сорс также, но дата сорс зависит от других чтобы можно было хранить модели с которыми есть отношение, получилась у нас схема похожа на пирамиду, дата сорс ответственный за хранение главную модель, а за другие модели которые внутри ответственны другие дата сорсы, то есть дата сорс обращается к другим дата сорсам для хранения под-моделей, и потом только хранит свою модель. Другие дата сорсы также с начала обращаются к другим для хранения под-моделей и потом только свою. У нас так получилось решить проблему с кучей реп и кучей хелперов и других ответственных компонентов, также мы так гарантируем что данные хранятся в правильном порядке не важно какой у нас флоу, и все прозрачно так как нет никаких подводных камней.

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому

      Ничего не понял, но выглядит так как будто вам помогут юзкецсы )

    • @TamimProduction
      @TamimProduction 2 роки тому

      @@MobileDeveloper У нас так было через юзкейсы/интеракторы. Но как показалась практика не очень подходящий вариант для сложных моделей и отношения между ними, мы решили сделать так, чтобы дата сорс был полностью ответственным за хранения всех этих данных, поэтому, в некоторых моментах когда есть many-to-many отношения, дата сорс может зависеть от другого. По старому подходу через юзкейсы у нас было грязнее намного. Пока я писал этот коммент, я понял что у каждого проекта своя специфика, и какие-то правила могут нарушаться чтобы не получить еще больше проблем, главное чтобы все было прозрачно и логично.

    • @TamimProduction
      @TamimProduction 2 роки тому

      @@MobileDeveloper Спасибо за ролик) Шикарный)

  • @hueynews7489
    @hueynews7489 5 місяців тому

    Приветствую! Для меня как для недоджуна видео было максимально бесполезно. Надеюсь что я действительно всё пойму на реальном проекте :D

  • @volodymyr107
    @volodymyr107 2 роки тому

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

    • @AlSaintUk
      @AlSaintUk 2 роки тому

      При чем тут клин к ретрофиту? Ретрофит должен разруливать, dagger, koin и т.д.

    • @illyaevseev312
      @illyaevseev312 2 роки тому

      Retrofit поддерживает очень много всего. Но совсем не обязательно использовать абсолютно все фичи. Даже если какие-то из них ну очень нравятся. Local и remote data source срастаются в Repository. Поэтому получить token из базы, если он хранится там, и отдать прямо в метод api.fetchSms(token, ...) не составит труда.

    • @AlSaintUk
      @AlSaintUk 2 роки тому

      @@illyaevseev312 токен подвязывается напрямую в апи сервисе аннотацией @Headers. Можно руками прокидывать в кастомный интерцептор. Тут как барин пожелает.

    • @illyaevseev312
      @illyaevseev312 2 роки тому +1

      ​@@AlSaintUk По поводу @Headers. По-вашему я сказал что-то другое? По поводу интерцептора. Вы же помните, что мы говорим не о том, что можно написать интерцептор или нельзя? Мы говорим о том как поступить с точки зрения чистой архитектуры. Вы, конечно, можете меня переубедить, но пока я уверен, что кастомный интерцептор это remote data source и про базу данных вообще ничего не должен знать. Более того. Я уверен, что решать какой токен использовать и использовать-ли вообще должен в обсуждаемом случае все-таки repository.

    • @AlSaintUk
      @AlSaintUk 2 роки тому

      @@illyaevseev312 при чем тут токен к архитектуре вообще? Не смешите мои носочки

  • @diatm1506
    @diatm1506 4 місяці тому

    Можете расказать что такое N-Tier architecture
    Clean architecture
    Onion architecture
    Hexagonal Architecture
    Layered architecture
    Ports & Adapters architecture
    Vertical Slices architecture
    Event-Driven architecture
    SOA architecture
    Monolith architecture
    Microservices architecture
    Tdd, bdd, ddd, edd, stdd, atdd
    Extreme pprogramming
    command query responsibility segregation CQRS?

  • @aleksandrvolkov4310
    @aleksandrvolkov4310 2 роки тому +4

    1) Почему то про модули не сказал для ускорение сборки, на огромных проектах без разделения невозможно.
    2) Про архитектуру в общем: если убрать тестирование, то она нужна для понимания проекта новым человеком.
    3) Нужен ли обязательно домен слой(если нет какой-то бизнес логики, просто сходи в сеть и покажи результат), вопрос очень холиварный. В частности надо ли делать маппинг даат классов на каждом слое, иначе api response ответ, объявленный data слое будет виден в presentation, что не по клину))
    4) Ещё бы добавить в видео пару слов о архитектуре, которая используется в гугловых примерах и кодлабах, многие берут оттуда, считая это эталоном.

  • @dreamer6228751
    @dreamer6228751 2 роки тому

    Вот прям красавец, а то напилят калькулятор с 100500 усеркейсов)). Спасибо за видосик

  • @immortal_lnight
    @immortal_lnight 2 роки тому

    Сейчас пишу большое приложение в соло (похоже компании денег жаль) надеюсь, что если потом кому-то прийдётся разбираться с моим кодом он поймёт хД

  • @_balancy_
    @_balancy_ Рік тому

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

  • @olegleonov1310
    @olegleonov1310 2 роки тому

    Я бы добавил, что должен быть source of truth в репозитории и логика по этой части должна быть там, остальная во ViewModel при использовании mvvm. Но это уже тема другого видео, похоже)

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому

      На эту тему можно бесконечно говорить )

  • @artem.novikov_nn
    @artem.novikov_nn 4 місяці тому

    Я думаю потому и используются несколько разных по ответственности data source в одном репозитории изза того, что domain слоя нет

  • @sergey30027
    @sergey30027 2 роки тому +1

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

  • @MxMayers
    @MxMayers 2 роки тому +3

    Я считаю если ты начинающий, "особенно начинающий" то архитектуру с юзкейсами и тд нужно пихать даже в калькулятор! Даже если ты не планируешь идти в команду, даже если это твое хобби от основной работы и ты не планируешь серьезно лезть в mobile development всегда везде следует делать архитектуру. Почему? Потому что должна вырабатываться привычка писать чистый читаемый код, это как в спортзале: если ты привык одевать пояс на присед с малым весом (допустим 30 - 50 кг), у тебя не будет проблем когда ты будешь приседать 90 - 120 ты первым делом автоматом будешь искать пояс потом только выполнять упражнение (безопасность превыше всего!). Еще пример: гораздо проще накидать юзкейсов и потом по ним продвигаться, чем сидеть и думать что тут должно быть или что тут еще можно добавить... я раньше не понимал подход database first типа "что за бред" 🤔, сейчас же наоборот, к UI перехожу в самую последнюю очередь когда все разложено "по полочкам" по пакетам по юзкейсам.

    • @bulsond
      @bulsond Рік тому

      Разочарую, но database first тоже неверный подход. Верный это DDD, то есть сначала domain. ua-cam.com/video/JOy_SNK3qj4/v-deo.html

  • @legioncommander7261
    @legioncommander7261 2 роки тому +1

    Репозиторий по канонам должен иметь только один датасорс. А вот уже интерактор может в несколько репозиториев ходить

  • @andrew3937
    @andrew3937 2 роки тому +1

    Чтобы иметь право решать что нужно, а что не нужно, надо быть мидлом-синьером) Об этом никто не говорит только))

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +1

      В своём прокаты ты сам себе синьор

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +1

      Да и на галерах часто ты сам себе синьор

  • @mr-re1ax
    @mr-re1ax Рік тому

    Оскара ему Оскара!!!

  • @Mecenatt
    @Mecenatt Рік тому

    Помниться написал на PHP форум , с модерацией и т.д , там не то что клин архитектуры не было , там даже ООП не использовалось . Ни одного класса . Долго не мог понять зачем вообще эти классы нужны .

  • @BelokonRoman
    @BelokonRoman 2 роки тому +1

    Меня бомбит от джунов и мидлов, которые MVP на MVVM натягивают и Clean архитектурой все это погоняют, но при этом не знают фундаментальных вещей по типу чем List от Set отличается.
    А еще часто задаю очень простой вопрос на собесе: зачем нужна архитектура. И многих людей это ствит в тупик. И там идут ответы "Ну так надо" или "Все так делают"

  • @telephon3208
    @telephon3208 Рік тому

    не поняла сравнение с бритвой окама))

  • @denrimden6333
    @denrimden6333 Рік тому

    Какие вопросы задают на собесе про cleanархитектура

    • @MobileDeveloper
      @MobileDeveloper  Рік тому +1

      В основном самые простые, а-ля что такое домен, дата слой. Зачем вообще все это нужно)

  • @bulsond
    @bulsond Рік тому +1

    Функция в 50 строк? На мой взгляд, это до хера. 10-20 строк максимум, функция должна делать только одну логическую операцию если иначе, то ее необходимо разбивать на ряд малых фукций.

  • @captainsustain
    @captainsustain 4 місяці тому

    Не согласен в деталях, да архитектура должна соответствовать масштабу проекта, но она всё равно должна быть, можно не использовать интеракторы/юзкейсы, но разбиение на модули и следование гайдам очень важно, тк во первых читаемость, расширяемость хорошая, и разделение ответственности автоматически, (+ интерфейсы лучше применять, и di и тестирование проще с ними) во вторых - в будущем на проекте будут работать другие люди, и они быстрее вьедут и не будет вопросов "че тут за говнокод". Плюс польза для самого себя - ты сразу заводишь привычку писать всё нормально, в итоге нет каши в голове типа "а надо тут или нет" - просто делай сразу нормально, и переделывать потом не надо будет, переделки множат говнокод и разнообразие в проекте, а хорошая архитектура - это минимум разнообразия в подходах. В больших проектах часто такое вижу, что модули сильно отличаются по реализации, надо пытаться минимизировать эту разницу

  • @-Alexey-
    @-Alexey- Рік тому

    Какие 600 строк-то? Замучаешься файл мотать. Дядя Боб говорил про 50 в среднем, но не больше 100.

  • @denchic45
    @denchic45 Рік тому

    Единственная архитектура на андроид это чистая архитектура)) Mv* это же ведь шаблоны проектирования

  • @nadzeyakondrat184
    @nadzeyakondrat184 2 роки тому

    интерфейсы нужны для тестирования. а это важно при любой арихитектуре

    • @illyaevseev312
      @illyaevseev312 2 роки тому +3

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

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +2

      Эм, ну так я блин в видео же и говорю, что для тестов ок. Только как правильно заметил Илья приложений без тестов 99%
      Будешь тесты писать тогда и сделаешь интерфейсы

  • @antonpopkov5003
    @antonpopkov5003 Рік тому +1

    Interactor и UseCase это разные названия одной сущности. Это одинаковые вещи, по-сути

  • @andrew3937
    @andrew3937 2 роки тому

    Освети многомодульность пж)

    • @MobileDeveloper
      @MobileDeveloper  2 роки тому +2

      Освящаю! Да будет многомодульность ободрена, положена и в градл запущена!

    • @maksonic_official
      @maksonic_official 2 роки тому

      @@MobileDeveloper 🤣🤣🤣

  • @dmitriyobidin6049
    @dmitriyobidin6049 2 роки тому

    Блин, как же все сложно в этих мобильных приложениях…

  • @sergeisalnikov6427
    @sergeisalnikov6427 4 місяці тому

    просто треп

  • @ryengard
    @ryengard Місяць тому

    Чувак, когда говоришь умные мысли, у тя лютые мышечные тики на лице.

    • @MobileDeveloper
      @MobileDeveloper  Місяць тому

      А ты думаешь я не в курсе?

  • @user-hn8jl8ym1e
    @user-hn8jl8ym1e 2 роки тому

    То же самое по поводу кучи библиотек, возможно они вообще не нужны в вашем проекте и все задачи стандартным набором разработчика. И изучение этих библиотек отнимает время, а под капотом они используют то, что вами давно познано и отработано. Сегодня одна модная библиотека, а завтра на вашу голову придумают еще десять. Делюсь мыслью.

  • @leight9503
    @leight9503 Рік тому

    Хм, ну я просто всегда юзаю модули с интерфейсами и DI контейнерами. Тупо везде и всегда. И ни разу не пожалел. Накладные расходы минимальные, MV family штуки получаются как бы сами по себе только там где нужны. Минимализм это здорово, конечно, но как вы потом будете тестировать ваш код без контейнера зависимостей и интерфейсов? Стоит на проекте появиться , хотя бы, одному программеру кроме вас и уже появляется необходимость тестировать ваш код. А это тянет за собой требование к наличию той самой архитектуры... Поначалу все всегда просто, а потом "пара обновлений дизайна, пара новых фичей" и вы уже в говне по уши :)
    Поэтому я б даже калькулятор писал с DI контейнерами, интерфейсами, модулями и какой-то базовой архитектурой.
    Ну, я , правда, в геймдеве, мб в других отраслях специфика иная, но тут говна поесть на этом можно очень легко.

    • @MobileDeveloper
      @MobileDeveloper  Рік тому

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

    • @leight9503
      @leight9503 Рік тому

      ​@@MobileDeveloper нет, пока не доросли еще, к сожалению, до автотестов. Тестирую модули все еще "руками" из вспомогательных классов, но , по крайней мере, это делается изолированно от остального проекта, а не падает на QA отдел, или коллег уже по факту.
      Но очень сильно руки чешутся протащить полноценные тесты в проект, ибо не все получается отловить так, да и время занимает.
      Не подскажете, что дельного можно почитать на тему автотестов и в целом внедрения их в C# проекты? Специфика - Unity/ gamedev.

    • @MobileDeveloper
      @MobileDeveloper  Рік тому +1

      В C# не подскажу ) у меня все таки мобильная разработка, но думаю та же пирамида тестирования она относится к любому виду программных продуктов

    • @leight9503
      @leight9503 Рік тому

      @@MobileDeveloper угу, погуглю, спасибо!

  • @moni_panica
    @moni_panica 2 роки тому

    Лучше понял что такое "код ради кода"

  • @kalayda
    @kalayda 4 місяці тому

    Сборник вредных советов. Главное голос поувереннее.

  • @backoff6776
    @backoff6776 11 місяців тому

    Хм... интересно. У меня сложился похожий подход. Овэрхэдить на проэкте - не есть хорошо. Но я бы сказал, что UseCase полезен почти всегда. А вот в Repository, при налиичии кейсов, я вообще особого смысла не вижу. Да это добавит некую декомпозицию но она логически неоправдана. Если мне нужно сходить на 3 ресурса, имея при этом токен - я сделаю 1 кейс, который обратится к локальному источнику за токеном, позже сходит по цепочке на нужные удаленные источники, а в случае протухшего токена - сходит на auth сервеер, обновит токен и повторит действа. Зачем нужны в таком случае репозитории, объеденяющие источники попарно?

  • @frrrost1504
    @frrrost1504 2 роки тому

    Пока никто не видит мои модели сами себя сохраняют в базу на .save() и умеют преобразовываться в другие модели dogRealm.threadSafeModel() ...