Тёмный

Dagger 2 - @Provides, @Module. Полный обзор. [RU, Android] / Мобильный разработчик 

Mobile Developer
Подписаться 50 тыс.
Просмотров 28 тыс.
50% 1

Всем привет. Весь мир андроид разработки использует библиотеку Dagger. Попробуем разобраться как она работает и как ее использовать.
Мобильный разработчик в других соц. сетях
=======================
Вконтакте - mdeveloper
Instagram - / nplau
=======================
Наши друзья и информационные партнеры:
t.me/androidev - Телеграмм канал, посвященный разработке для Андроид!
Поддержать канал рублем:
PayPal - alexgladkov@icloud.com
Mastercard - 5536 9137 9985 0652
Ставь лайк, подписывайся и пиши, чтобы ты хотел увидеть в следующих видео

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

 

17 ноя 2018

Поделиться:

Ссылка:

Скачать:

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

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 231   
@serggio88888
@serggio88888 4 года назад
Итог: при аннотации @Inject даггер идет в @Componrnt - ищет в модулях аннотацию @Provides с типом возвращаемым как у инжектируемого поля. при этом в компоненте должна быть функция инжектирования, принимающая тип класса, в который мы инжектим а и плюс нада сбилдить проект и потом классе, имплементящем апликейшн, сделать криэйт даггеровского билдера
@MobileDeveloper
@MobileDeveloper 4 года назад
Да )) кратко и точно )
@user-wo6bq7qc7m
@user-wo6bq7qc7m 3 года назад
Лучший ответ. Этот коммент мне помог понять эту библиотеку. Ну и спасибо Алексею за видео)
@preenxus3425
@preenxus3425 5 лет назад
такая эпичная музычка, чувствую себя у олимпа :)))
@user-ie6vj3ok7v
@user-ie6vj3ok7v 5 лет назад
Шикарно бы сделать ещё 10 минутное к нему, где просто заинжектить всё по шагам. А чтобы смогли понять все, в идеале создать небольшой пример и отрефакторить с даггером
@MobileDeveloper
@MobileDeveloper 5 лет назад
Отличная идея)) Обязательно сделаю, спасибо!
@TalgatTR
@TalgatTR 5 лет назад
@@MobileDeveloper А когда? А то, кажется, я не справляюсь)
@MobileDeveloper
@MobileDeveloper 5 лет назад
Хм ) пока не могу сказать. Как только будет вы об этом узнаете.
@user-ie6vj3ok7v
@user-ie6vj3ok7v 5 лет назад
Вот думаю, полезно ещё будет сделать именно с особенностями андроида, допустим Context инжектить. Не знаю, плохая ли практика, дабы в фрагментах не писать длинные вызовы к контексту
@MobileDeveloper
@MobileDeveloper 5 лет назад
@@user-ie6vj3ok7v Во фрагментах контекст вызывается очень просто. getContext() или просто context если котлин
@adizbek_ergashev
@adizbek_ergashev 5 лет назад
Спасибо за урок, целый день не мог понять как устроен dagger, отличный вариант показывать на реальном проекте
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо!
@bair1171
@bair1171 Месяц назад
все просто и на пальцах! Как батя раскидал!! лайк, подписка, колокольчик!
@anatoliyanatoliy4697
@anatoliyanatoliy4697 4 года назад
Спасибо, третий день изучаю даггер... для начального уровня не хватало понимания взаимосвязей устройства библиотеки. Теперь все стало на свои места!
@MobileDeveloper
@MobileDeveloper 4 года назад
Пожалуйста ) Не пропустите новые видео про Kotlin Native на патреоне)
@arturxdreil
@arturxdreil 4 года назад
Наконец-то разобрался, спасибо большое))
@MobileDeveloper
@MobileDeveloper 4 года назад
Пожалуйста )
@serggio88888
@serggio88888 4 года назад
шикарно объяснил
@MobileDeveloper
@MobileDeveloper 4 года назад
Спасибо )
@daniilvik8689
@daniilvik8689 4 года назад
Спасибо за ваш труд, но хотелось бы высказать пару пожеланий. Для новичков всегда трудно понимать материал когда, его показывают в каком-то большом реальном проекте (так как там много лишнего не относящегося к теме), гораздо удобнее воспринимать материал на каком-то небольшом учебном примере, который создается с нуля специально для объяснения данной тема. Также это способствует понимаю в какой последовательности что создавать и т.п. Именно создав небольшой учебный проект на соответствующую тему, в дальнейшем, обучающемуся можно будет вернутся к нему в любое время и посмотреть что да как, поэкспериментировать с ним и соответственно лучше понять его принцип работы.
@MobileDeveloper
@MobileDeveloper 4 года назад
Ну вы поймите что я не могу себе позволить создавать постоянно проекты это ведь вагон времени. Я итак это делаю все на голом энтузиазме )
@user-ow3ib7vc4h
@user-ow3ib7vc4h 3 года назад
То что нужно в самом начале, спасибо 😌
@sexol1235
@sexol1235 5 лет назад
Прошу видео по Rx. RxJava, RxKotlin, RxAndroid. Основы Rx, разница между основными компонентами, что и где лучше использовать и примеры в реальных задачах (почему так , как ещё можно). Спасибо.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да, есть такое видео в плане, но оно достаточно объемное (как и сама библиотека), так что прошу запастись терпением :)
@namesecondname7863
@namesecondname7863 5 лет назад
Большое спасибо за видео!
@MobileDeveloper
@MobileDeveloper 5 лет назад
Приятного просмотра :)
@user-qs5qr3ng4n
@user-qs5qr3ng4n 5 лет назад
Еще не досмотрел видео, но хотелось уже поблагодарить. Именно то, что искал. Вот входе бы понимаешь принцип библиотеки, используешь в проектах, но каждый раз приходится гуглить из-за базового непонимания принципа работы. Спасибо)
@MobileDeveloper
@MobileDeveloper 5 лет назад
Бейбут Тукибаев вам огромное спасибо! Да такое у меня было как раз с даггером
@user-fj3el8sh2n
@user-fj3el8sh2n 2 года назад
ничего не понятно,пытаешься подавать примеры из своего кода, который мы не занем и в котором еще надо разобраться
@jojomajo
@jojomajo 2 года назад
Самое понятное объяснение даггера из всего что видел
@ki11qwerty47
@ki11qwerty47 4 года назад
Спасибо большое, удивительно как за 30 минут все по полочкам в голове улеглось, а то пол дня читал и нифига не смог в голове укомплектовать))))
@MobileDeveloper
@MobileDeveloper 3 года назад
Рад, что помогло )
@TheAiSaEr
@TheAiSaEr 5 лет назад
Для самых новичков будет трудновато наверное, а для тех, кто уже изрядно помучился и кому нужно теперь всю полученную информацию связать и посмотреть как это все в проекте использовать - самое то. Спасибо за видео!
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо большое! )
@Vl-TV
@Vl-TV 4 года назад
это точно, мне очень сложно( help
@MobileDeveloper
@MobileDeveloper 4 года назад
Я не знаю как можно ещё это доступнее объяснить в видео 🤷‍♂️
@dentor2005
@dentor2005 3 года назад
@@MobileDeveloper Возможно, тогда, это не ваше - писать уроки. Раз сами удивляетесь почему так мало просмотров. Вот простой и краткий пример по реализации для новичка, чтобы ввести в курс дела Dagger2: 1. Создать "Модули" (поставщик объекта). Каждый модуль помечается @Module. В модуле должен быть метод, который создает и возвращает (return new _) желаемый объект (другой класс из другого файла). Получается связка: Модуль - Возвращаемый объект (2 файла). Каждый такой метод в модуле помечается аннотацией @Provides. 2. Создается интерфейс AppComponent с аннотацией @Сomponent. Интерфейс наполняется сигнатурами методов. 1 модуль с 1 возвращаемым объектом = 1 сигнатура метода в Компоненте. Возвращаемый объект - один из тех, что возвращает один из модулей. 3. Есть два способа получения объектов: get, injection и пошел урок далее. Вся МАГИЯ Dagger 2 в том, что он сам создаст реализацию интерфейса AppComponent и назовет класс DaggerAppComponent. В дальнейшем при желании получить объект - Dagger 2 будет использовать данный класс. Нам его трогать вообще не обязательно. Для комфортного понимания лекции необходимо использовать графику, таблицы, показывать взаимосвязи, а не просто писать пример из классов A, B, C...
@MobileDeveloper
@MobileDeveloper 3 года назад
@@dentor2005снимите свое видео я вам запрещаю что ли?)
@tilld9488
@tilld9488 4 года назад
Это вот первое видео которое я решил посмотреть по dagger когда сказали что надо с ним писать, и сразу все понятно стало.
@MobileDeveloper
@MobileDeveloper 4 года назад
Круто )) рад что помог ))
@user-te8um6ox9p
@user-te8um6ox9p 4 года назад
Видос супер крутой! Алексей, спасибо большое!
@MobileDeveloper
@MobileDeveloper 4 года назад
Спасибо )
@momentslikethis8014
@momentslikethis8014 5 лет назад
Спасибо, помог
@MobileDeveloper
@MobileDeveloper 5 лет назад
Всегда, пожалуйста )
@martino6200
@martino6200 4 года назад
Спасибо за урок! Подскажите, я заметил, что вы все инжектите в активити, а если я использую moxy и хочу напрямую в презентер заинжектить репозитории? Или нужно именно в активити? И как тогда вы передаете зависимости в презентер, если он уже помечен @InjectPresenter?
@MobileDeveloper
@MobileDeveloper 4 года назад
Можно инжектить в презентер для этого нужно в компоненте прописать соответствующую функцию inject и в ините презентера сделать appComponent.inject
@user-ee9ql7cu3o
@user-ee9ql7cu3o 3 года назад
@InjectPresenter это из мокси аннотация, тоже di, только к даггеру отношения не имеет. Вставит туда то, что запровайдится методом @ProvidePresenter
@sergeyjoke
@sergeyjoke Год назад
Спасибо.
@pavelsumin4678
@pavelsumin4678 5 лет назад
Спасибо за урок! Было бы здорово еще увидеть от Вас гайды по Rx (писали ниже) и по библиотекам навигации, к примеру, тот же Cicerone, который светился на этом видео.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Будут такие видео)
@alexanderpalushin150
@alexanderpalushin150 3 года назад
Спасибо! Наконец то я понял как это работает
@MobileDeveloper
@MobileDeveloper 3 года назад
Пожалуйста))
@yurazhovnir9322
@yurazhovnir9322 4 года назад
лайк)))
@MobileDeveloper
@MobileDeveloper 4 года назад
Спасибо )
@user-ks8zk9dn3s
@user-ks8zk9dn3s 3 года назад
Спасибо Человек!
@MobileDeveloper
@MobileDeveloper 3 года назад
Пожалуйста)
@user-cv7fi9uj1d
@user-cv7fi9uj1d 5 лет назад
И второй вопрос. Вот есть AppComonent, который помечен @Comonent и @Singleton и которой насколько я понял, выполняет функции "настроечного", то есть на его основе и выстараивается пресловутое дерево зависимостей. Ты там помимо массива модулей, также в функциях интерфейса, помеченные аннотацией @inject перечисляешь все активити и фрагменты. Это тоже требования даггера - указать все целевые активити и фрагменты, где требуется даггеровский CI?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Ну в момент вызова inject дерево зависимостей имплантируется в класс, то есть не обязательно их конкретно в одном файле AppComponent прописывать но да прописывать надо
@andreyivanov8571
@andreyivanov8571 3 года назад
Было бы неплохо запилить продолжение, про Submoduls, @Binds и Scopes. А так хорошо, спасибо за видео.
@MobileDeveloper
@MobileDeveloper 3 года назад
Отчасти все это есть на патреоне в видео про TransportApp
@highvoltage7407
@highvoltage7407 5 лет назад
Спасибо вам за видео. Все подробно описано. Хотел спросить: не могли бы вы рассказать про scopes. Это очень сложный компонент этой библиотеки. Использовали ли вы его в своих проектах?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Про scopes расскажу обязательно раньше не использовал, теперь вот начал.
@gollumenjoyer3786
@gollumenjoyer3786 5 лет назад
Не соглашусь на счет длительности. Да возможно большая длительность не сопутствует просмотрам (это не точно), но информация изложена максимально доходчиво и понятно. Спасибо, было очень полезно и приятно!
@MobileDeveloper
@MobileDeveloper 5 лет назад
Вам спасибо ) Да я не гонюсь прям сильно за просмотрами. Именно за их количеством. Мне важнее качество, то есть, чтобы люди, которые смотрят им было это интересно и полезно.
@elpirato5428
@elpirato5428 3 года назад
Спасибо, жалко не показали прям с пустого проекта, поскольку у меня например опыта пол года всего и понять уже на готовом проекте получается только поверхностно, сейчас сам буду пробовать использовать дагер.
@MobileDeveloper
@MobileDeveloper 3 года назад
На пустом проекте есть видео на патреоне.
@user-hh5fv4ee7f
@user-hh5fv4ee7f 4 года назад
Спасибо тебе большое. Действительно разбираться в статьях оч сложно, а ты практически за пол часа обьяснил все доходчиво и понятно) Единственно что, вопрос, я не долго в андроид разработке, но нормально ли то, что с дагерром надо использовать апликейшен? Просто насколько я знаю это вроде как ресурсо затратная штука
@MobileDeveloper
@MobileDeveloper 4 года назад
Да если у вас один компонент на приложении в аппликейшне ему самое место. Что значит ресурсозатратное? Аппликейшн существует всегда ))
@ch1pkavarenychenko84
@ch1pkavarenychenko84 5 лет назад
спасибо за видео, можно снять еще о Timber
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да, спасибо, запишу :)
@user-vl4lk8hb8b
@user-vl4lk8hb8b 5 лет назад
Большое спасибо за видео, идеально подошло, потому что я и до просмотра разобрался с дагером, но посмотреть как это выглядит в реальных проектах было очень полезно. Очень крутой канал, жду новых видосов! Удачи!
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо большое!
@user-vl4lk8hb8b
@user-vl4lk8hb8b 5 лет назад
Mobile Developer хочу понять одну вещь, если бы я писал mvp без мокси, то мне бы приходилось в активити(view) создавать экземпляр презентора и соответственно можно было бы это все запихать в модуль и заинжектить во вьюхе. Но когда я использую мокси, то там все работает по другому. И как быть тогда? Т.е. Экземпляр презентора инжектировать с помощью дагера не надо, т.к. он инжектируется с помощью мокси. Правильно понял? Или очень сильно ошибаюсь?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да все правильно. Для Инжекта мокси используется аннотация @InjectPresenter, а аннотация даггера выглядит как @Inject. Они визуально похожи, но их можно смело использовать в одном классе view без проблем. То есть даггер для этого использовать не нужно, а использовать для других вещей. То есть часть с mvp оставляем Moxy, а все остальное даггеру.
@user-vl4lk8hb8b
@user-vl4lk8hb8b 5 лет назад
@@MobileDeveloper спасибо большое!
@veldan1202
@veldan1202 3 года назад
Хорошее об'яснение
@MobileDeveloper
@MobileDeveloper 3 года назад
Спасибо )
@user-cv7fi9uj1d
@user-cv7fi9uj1d 5 лет назад
Ладно такой вопрос, через аннотацию @Provides ты определяешь функции инстанциирования тех зависимостей, которые затем будут вставлены куда надо. Но я заметил, ты в них же ссылаешь далее на классы-имплементации, к примеру CurrentProviderImpl Правильно ли я понимаю, что эти имплементации - это собственно целевой код, который ты уже руками сам пишешь. И во время тестов ты можешь эти классы подменять, не трогая выстроенную конструкцию даггера, верно?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Ну условно поскольку я использую общение через интерфейсы, то в провайд тип возвращаемый это интерфейс а внутри функции да я подставляю реализацию коих может быть очень много. Например тестовые
@user-cv7fi9uj1d
@user-cv7fi9uj1d 5 лет назад
Mobile Developer Вот и хотелось бы глянуть, ты бы хоть раз кликнул на ревлизацию
@andreymolochko988
@andreymolochko988 5 лет назад
Спасибо за это и другие видео. На данный момент нет подобных видео на русскоязычном ютубе. Возник вопрос : в требованиях на миддла практически в каждой компании есть строчка Dagger. Что нужно знать, уметь по этой технологии, чтобы закрыть эту строчку на собеседовании. (Понимаю, что в каждой компании могут требовать по-разному, тогда интересно ваше мнение, что нужно знать и уметь миддлу по Dagger)
@MobileDeveloper
@MobileDeveloper 5 лет назад
Ну нужно уметь создавать хотя бы один аппкомпонент и прописывать инъекции, уметь их читать, представлять дерево зависимостей. Уметь искать ошибки. В общем, все как всегда )) Спасибо, рад, что понравилось!
@sfiirwuejnn
@sfiirwuejnn 5 лет назад
Здравствуйте, я правильно понял, что в новых версиях надо просто прописать DaggerAppComponent.builder().build(), не надо там всякие модули прописывать в билдере (типа NetworkModule, AppModule e.t.c)?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да, все верно) По-моему за исключением если вы в модуль что-то передаете параметром.
@ds6325
@ds6325 4 года назад
Спасибище за урок! достаточно внятно описано, как работает даггер. Наконец понял. хабровская статья с игрой престолов по сравнению с этим уроком - ничто
@MobileDeveloper
@MobileDeveloper 4 года назад
Спасибо большое, очень рад, что видео оказалось полезным!
@illiamaksymenko804
@illiamaksymenko804 4 года назад
блин тоже читал игру престолов, почему автор подумал что если он возьмет какую-то хайповую вещь и приложит к непонятной то тогда все поймут
@MobileDeveloper
@MobileDeveloper 4 года назад
Я тоже ее читал и нифига не понял )) возможно потому что в самой игре престолов нихрена не понятно
@user-uy7pl8ci7o
@user-uy7pl8ci7o 4 года назад
А мне как раз видео не зашло, а в статье там всё по шагам разобрано)
@user-lg9zz5td4x
@user-lg9zz5td4x 3 года назад
пересмотрел три раза, на четвертый понял как все устроено)
@MobileDeveloper
@MobileDeveloper 3 года назад
В этом прелесть видеороликов )
@eminyenaliyev8037
@eminyenaliyev8037 4 года назад
В первую очередь, спасибо за проделанную работу, очень помогло при первых ознакомлениях. Но хотелось бы узнать, больше о том как возможно injectить context, какие либо собственные интерфейсы, и все это с мелким примером на github. Спасибо.
@MobileDeveloper
@MobileDeveloper 4 года назад
Пожалуйста ) да была у меня мысль сделать ещё одну часть про даггер. Скоупы там и так далее. Вы можете ускорить этот процесс за небольшой донат в группе в вк
@nightscream3687
@nightscream3687 4 года назад
Спасибо за видео! Смотрю все с удовольствием. В принципе понятно что получить класс можно где угодно 2 строчками кода, удобно, но можете подсказать чем плохо было бы прописать например retrofit и room в Application классе и потом просто оттуда брать уже готовую реализацию? Application живёт всегда, достучаться до него можно откуда угодно. PS: мой комментарий СОТЫЙ
@MobileDeveloper
@MobileDeveloper 4 года назад
Поздравляю вас с этим )) Да Application хорош если у вас не 1) Разбитый на модули проект 2) Нет огромного дерева подзависимостей 3) Нет подменямых для разных мест реализаций одного интерфейса)
@nightscream3687
@nightscream3687 4 года назад
@@MobileDeveloper Спасибо за ответ. Не по теме. Мне тут инфа проскочила что запланирован вебинар ч.2. Будем доделывать наших героев доты? Когда?
@MobileDeveloper
@MobileDeveloper 4 года назад
Да, к сожалению, у меня был форс мажор, поэтому пока точную дату не могу сказать
@user-ze1dh1cz2g
@user-ze1dh1cz2g 2 года назад
29:00 - просто вся суть в одной фразе 😀
@acrrono
@acrrono 5 лет назад
спасибо, очень помогло, хотя я вообще искать что делать с квалифаерами)) музыку в 2 раза тише плз))
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо, да в этом видео есть такая проблема. Дальше я тише музыку делал.
@bohdanserdyuk5959
@bohdanserdyuk5959 5 лет назад
подписался
@MobileDeveloper
@MobileDeveloper 5 лет назад
Bohdan Serdyuk спасибо! Будут новые видео
@devlog456
@devlog456 5 лет назад
Спасибо за видео! Кстати, не пробовал библиотеку Koin? Как мне кажется, с ней работать реально проще, чем с Дагером. Хотя она еще не так популярна, к сожалению.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да, слышал про нее, но уже настолько привык к Dagger, что не хочу переходить. Но в целом все тоже самое можно и без библиотеки сделать, тут главное сам архитектурный подход
@alexeypipchuk5978
@alexeypipchuk5978 5 лет назад
Если у тебя косяк в зависимостях, с Koin приложение упадет во время исполнения, а с даггером еще на этапе компиляции, что лучше само собой
@user-vl4lk8hb8b
@user-vl4lk8hb8b 5 лет назад
Хотелось бы еще увидеть видос что-то типа "котлин vs джава в андройде". Было бы очень интересно послушать
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да есть такая мысль
@Maslenikov24
@Maslenikov24 5 лет назад
А будет ли про Toothpick на канале?
@MobileDeveloper
@MobileDeveloper 4 года назад
А что конкретно вы хотите увидеть?
@vladyslavromanov6153
@vladyslavromanov6153 2 года назад
Спасибо за урок. Все максимально понятно. Вот последние 5 минут про архитектуру приложения тоже очень интересны, но мало понятны. Можно ли замутить урок про подробное рассмотрение архитектуры приложения, как все эти models, domain, di, services друг с другом связаны?
@MobileDeveloper
@MobileDeveloper 2 года назад
Думал об этом сделать, но в целом можно глянуть видео про Room. Там отчасти посветил этому время
@vladyslavromanov6153
@vladyslavromanov6153 2 года назад
@@MobileDeveloper Посмотрю, спасибо
@TheKrushik
@TheKrushik 5 лет назад
Можно гдето взглянуть на ваш приложение-шаблон, который вы используете во всех проектах
@MobileDeveloper
@MobileDeveloper 5 лет назад
Добрый вечер, нет, я этот проект никому не даю.
@nikresh471
@nikresh471 4 года назад
Я не могу разобраться как заинжектить Retrofit в другом классе. Все примеры показывают как делать в Activity или в Fragment, используя метод onCreate(). Я пытался вызывать метод inject(this) в конструкторе класса, но поле Retrofit всегда null!
@MobileDeveloper
@MobileDeveloper 4 года назад
Вероятно вы не тот Inject юзаете )) у меня такое было ) удалите все import и попробуйте подставить правильный )
@sjsjjdnjisjwjeuudn
@sjsjjdnjisjwjeuudn 4 года назад
а как в презентерах делать inject? статик свойство в application создавать? Хотя это вообще ужасно будет... На самом деле не хватает примеров кода с даггером именно в контексте mvc с репозиториями и вот этим вот всем. Честно говоря, не думал, что даггер окажется таким замороченным, учитывая, что имеется несколько лет опыта в бэке с symfony и кучей других фреймворков с di контейнером. Спасибо вам большое за ваши видео в любом случае.
@MobileDeveloper
@MobileDeveloper 4 года назад
В app component можно прописать инжект в презентер ) насчёт примеров я сейчас делаю некое такое ультимативное видео где будут охвачены все технологии ) Первое видео уже на канале, но оно вводное, второе про запросы к серверу доступно для патреонов. Третье видео где будет работа с бд и di появится на выходных, но опять же для патреонов
@zhenkanet
@zhenkanet 4 года назад
хорошо было бы прикрепить ссылку на репозиторий с примером. а так спасибо!)
@MobileDeveloper
@MobileDeveloper 4 года назад
Там насколько я помню куски из закрытых репозиториев )
@user-po3bx6kv3e
@user-po3bx6kv3e 4 года назад
Какая первая по использиванию библиотека? Retrofit?
@MobileDeveloper
@MobileDeveloper 4 года назад
Не понял )
@galamartinec7576
@galamartinec7576 4 года назад
Добрый день. Вы занимаетесь обучением/помощью с проектом онлайн? Набросан проект мной новичком, нужно привести к MVP архитектуре и исключить слабые места, сама не справляюсь, а помочь сейчас некому.
@MobileDeveloper
@MobileDeveloper 4 года назад
Да занимаюсь напишите мне в ВКонтакте пожалуйста )
@jenniferalderson6875
@jenniferalderson6875 5 лет назад
Если Вы, как и я, после просмотра видео так и не поняли как пользоваться даггером, секрет в том, чтобы найти очень лёгкий пример использования даггера, переписать его. Запустить. Увидеть, что, наконец-то эта штука заработала. Порадоваться. Поиграться с этим легким примером, постараться в него что-то ещё своё добавить, изменить. Очень много туториалов пересмотрела и перечитала, всё равно ничего не поняла, пока не начала крутить, вертеть лёгкие примеры. P.S.: Eщё желательно залазить в сгенирированные даггером классы и смотреть, как там всё реализованно(благо всё читаемо)
@MobileDeveloper
@MobileDeveloper 5 лет назад
Жаль что не удалось мне передать) но вообще с лёгким примером вы абсолютно правы это хорошая практика
@alexandernifanin7366
@alexandernifanin7366 5 лет назад
Спасибо за видео! Извините, в этот раз ложка дёгтя. Да, музыку надо сделать потише. К самому объяснению на видео особых претензий нет, азы разобраны неплохо. Но я не согласен, что Dagger 2 экономит время. У меня в двух проектах был Dagger, и это единственная библиотека, которая не принесла мне пользы, а отобрала кучу времени. Не только на обучение, но и на поиск многочисленных багов. Вообще не вижу в ней смысла и ненавижу её. Она реально увеличивает время сборки за счёт аннотаций и сборки модулей заново. Во время компиляции она постоянно на что-то ругается в самых неочевидных местах (сама она не в состоянии понять, где случилась проблема). Поиск по сообщениям об ошибке не даёт ничего, кроме общих рассуждений, что где-то что-то забыто. Структура модулей и компонентов запутана, а с версиями эта сеть ещё больше разветвляется. Создать синглтон можно и без Dagger, вызов синглтона занимает всё ту же одну строчку, как и вызов других классов, поэтому ничего там не экономится. Библиотека - частый спутник архитектур, в них она как-то по умолчанию, хотя странно, что авторы не могут сделать проект без неё. Я не понимаю, как она может чем-то помогать, а вот потерянные на её странную логику часы разработки - это реальная проблема.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Ничего страшного - здоровая критика только поможет улучшению контента ) Музыку сделаю потише. Возможно вообще ее уберу. Насчет экономии времени - я тут скорее имел ввиду, что оно экономит время при моем подходе к архитектуре. В целом для меня реально ускорение было существенным, особенно с учетом того, что модули у меня тянутся из одного проекта в другой. В целом, я всегда говорю, что библиотеки/фреймворки или какие-то скрипты - это не более чем инструмент. Хороший мастер использует подходящие инструменты и не использует не подходящие. Поэтому, я вполне верю вам, что в вашем проекте он не зашел. Моя задача была объяснить физику процесса этой библиотеки. Работа с аннотациями и как именно он строит зависимости, как раз потому что (тут вы абсолютно правы) ошибки Даггера очень и очень не очевидны для новичка. На это убивается цела гора времени.В целом все ошибки, которые я видел в даггере сводятся к тому, что где-то чего-то не "запровайжено" и дальше ты, как правило, сидишь и распутываешь дерево зависимостей до того момента, где собственно не запровайжено. Я могу легко сделать проект без нее, я даже в видео об этом говорил. Собственно в iOS такой нет библиотеки, поэтому я использую свой подход. В целом можно сделать фабрики классов с уже встроенными зависимостями (это даже гибче будет), но в целом если проблем с даггером не возникает (тут вопрос практики и опыта), то даггер все равно добавляется быстрее. Особенно если ты копируешь из проекта в проект ) Насчет синглтона, в одну строчку, наверное, не получится (если только вы не enum используете - это грамотный подход :) ). Но я использую не для синглтона (это побочный эффект), а именно, для инжекта класса с кучей подзависимостей. Допустим у вас есть модель данных (условно репозиторий) и UI (условно presenter) и репо используется в 3-4 презентерах, тогда я свои репки добавлю в каждый из них двумя строчками. Для подготовки этого нужно будет совсем немного времени (по сравнению с созданием собственных фабрик классов) и в таком ключе должно по идее дать прирост по времени. По крайне мере, мне дает ) Огромное вам спасибо за такой развернутый комментарий!
@alexandernifanin7366
@alexandernifanin7366 5 лет назад
Большое спасибо вам за подробный ответ! Очень приятно услышать мнение знатока. Вижу, вы в Андроид-разработке достаточно глубоко разбираетесь. Будет здорово увидеть ваши новые видео.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо большое) В целом я этот канал и затеял отчасти для того, чтобы в каждом из аспектов разработки максимально глубоко разобраться, потому что как правило я вижу подход - ну я всегда так делаю и работает, а пытаешься спросить почему это работает, то видишь глубокое непонимание в глазах.
@sexol1235
@sexol1235 5 лет назад
Расскажи как работать с Android Injector, как перенести инжект презентера через даггер и как правильно работать со Scope, Retention.
@sexol1235
@sexol1235 5 лет назад
и как делить на сабкомпоненты.
@sexol1235
@sexol1235 5 лет назад
и @Bind
@MobileDeveloper
@MobileDeveloper 5 лет назад
Да есть такое в планах ) но чуть позже )
@vladimirkosovskii4132
@vladimirkosovskii4132 4 года назад
Сделай очень простое приложение с даггером, что бы было наглядно) очень прошу)
@MobileDeveloper
@MobileDeveloper 4 года назад
Во второй части TransportApp есть даггер как раз. И в третьей будет
@vladimirkosovskii4132
@vladimirkosovskii4132 4 года назад
@@MobileDeveloper о это круто! Есть еще одно маленькое пожелание, MokWebServer на примере проекта разобрать и как делать ответы на определенный запрос)
@bsodKeks
@bsodKeks 4 года назад
Все отлично, но вот с даггером не могу понять только один момент. Как передать в конструктор какие-то данные допустим пришедшие извне?(с сети, с вьюхи) и.т.д.
@MobileDeveloper
@MobileDeveloper 4 года назад
Возможно вы неверно понимаете смысл даггера. Зачем вам передавать данные извне? Даггер нужен для создания дерева зависимостей
@bsodKeks
@bsodKeks 4 года назад
@@MobileDeveloper чет я затянул с ответом:) извне это был общий пример) вот допустим мне надо в репозиторий пробросить калбэк, который реализуется презентером. т.е. по сути мне надо в репозитории получить текущую реализацию, а не создавать новою. Как это можно реализовать даггером? пока я придумал колхозный(на мой взгляд) метод, в интерфейсе репозитория описываю метод setCallback() и при инициализации презентера, пробрасываю его в репозиторий
@MobileDeveloper
@MobileDeveloper 4 года назад
Лев апарин вам прям в конструктор надо прокинуть что ли? А зачем?
@bsodKeks
@bsodKeks 4 года назад
@@MobileDeveloper в репозитории получаю данные из сети, мне надо вернуть их в презентер
@MobileDeveloper
@MobileDeveloper 4 года назад
Ну так делайте callback в конкретном методе интерфейса
@UserSo4reUsu75ry
@UserSo4reUsu75ry 4 года назад
13:43 у меня такая же реакция )) Надо написать кучу бойлерплейта, чтобы это всё заработало Почему нельзя просто помечать инжектируемые классы какой-нибудь аннотацией @injectable ? Соррян я нуб и плохо понимаю, поэтому для меня выглядят странным и избыточным все эти модули, компоненты, провайдеры, квалифаеры )
@MobileDeveloper
@MobileDeveloper 3 года назад
Тут все очень просто ) можно попробовать написать крупный проект без использования какого-либо DI и тогда сразу все станет ясно 😂
@sexol1235
@sexol1235 5 лет назад
По поводу дагера : аннотации Scope, Retention не объяснили. А так мне нормально.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Хм, спасибо за идею - запишу продолжение.
@danielyakovenko3358
@danielyakovenko3358 5 лет назад
@@MobileDeveloper если продолжение ещё планируется, то хотелось бы увидеть как правильно, и правильно ли вообще, провайдить объекты, в конструкторы которых нужен контекст. А по поводу видео - очень круто и интересно, большое спасибо! Лично мне было бы интересно ещё посмотреть об архитектуре, слои - data/domain/presentation,что куда надо, как правильно написать контракт и т.д. Ещё раз, большое спасибо.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Daniel Yakovenko да это все будет. Насчёт контекста тут опасная тема ) заострю на этом внимание ) насчёт архитектуры я думаю после управления памятью пойду архитектуру делать )
@sonar_devices
@sonar_devices 4 года назад
Спасибо за Ваш труд. Музыка очень мешает. Громко и забирает на себя фокус внимания.
@MobileDeveloper
@MobileDeveloper 4 года назад
Рад, что помог ) насчёт музыки спасибо, однако, это довольно старое видео - сейчас музыка тише
@user-qp9wu5my5b
@user-qp9wu5my5b 4 года назад
уважаемый, инверсия контроля не имеет ничего общего с di, вы путаете определения
@MobileDeveloper
@MobileDeveloper 4 года назад
Одной из реализаций инверсии управления в применении к управлению зависимостями является внедрение зависимостей (англ. dependency injection)[2][3]. Внедрение зависимости используется во многих фреймворках, которые называются IoC-контейнерами. Скопирую и для вас тоже )
@mycanalcool
@mycanalcool 4 года назад
К примеру есть не большой проект MainActivity
@MobileDeveloper
@MobileDeveloper 4 года назад
Вы предлагаете мне во все это погрузиться?)
@mycanalcool
@mycanalcool 4 года назад
​@@MobileDeveloper понял) думал на примере показать) если по простому, то как мне передавать интерфейс в конструктор презентора используя даггер?
@MobileDeveloper
@MobileDeveloper 4 года назад
Написать соответствующую провайд функцию которая бы в типе возвращала интерфейс а в теле реализацию
@alexnick183
@alexnick183 5 лет назад
60 fps комп не тянет, приходится смотреть в пониженном разрешении 720р вместо 1080р :(
@MobileDeveloper
@MobileDeveloper 5 лет назад
:(
@vadimsimonov4681
@vadimsimonov4681 3 года назад
А почему у вас весь граф инициализируется в AppComponent?
@MobileDeveloper
@MobileDeveloper 3 года назад
А куда его еще?
@vadimsimonov4681
@vadimsimonov4681 3 года назад
@@MobileDeveloper я в том плане, что вы не разбиваете AppComponent -> Subcomponents с другими скоупами)
@MobileDeveloper
@MobileDeveloper 3 года назад
Видео довольно старое + я здесь хотел показать принцип работы даггеровских аннотаций (с этим больше всего проблем обычно). А то, что вы говорите есть в видео про TransportApp
@vadimsimonov4681
@vadimsimonov4681 3 года назад
@@MobileDeveloper спс, как раз гляну)
@user-cv7fi9uj1d
@user-cv7fi9uj1d 5 лет назад
друг, а мог бы расшарить репозиторий с проектом из видео, было бы в 10 раз информативней самому пощупать твою программку
@MobileDeveloper
@MobileDeveloper 5 лет назад
Я уже где то объяснял что я провожу индивидуальные занятия и консультации где мы смотрим код и я на более реальных проектах показываю. Так я свои исходники не выкладываю
@user-cv7fi9uj1d
@user-cv7fi9uj1d 5 лет назад
@@MobileDeveloper ты сеньор-многостаночник, двухплатформенник, и что даже гитхаба своего нет?) просто странно ты потратил на создание ролика наверное больше усилий, чтобы запилить свой майнинговый андроид-клиент, я так понял из фрагментов, что это нечто завязанное на крипту какие кстати расценки на индивидуалки?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Конечно у меня есть правда битбакет. С кучей приватных репозиториев, часть из которых я в некритичных кусках демонстрирую в ролике, но доступ к ним я открывать не буду. Клиент я пилил не для ролика он в качестве демонстрационного материала. По расценкам напишите мне в вк. vk.com/neura
@Sakhalinec
@Sakhalinec 5 лет назад
Почему Kotlin а не JAVA? Не уж то у kotlin такое большое преимущество, что почти все поголовно просят kotlin при трудоустройстве...
@MobileDeveloper
@MobileDeveloper 5 лет назад
Котлин объективно во всем превосходит Java) Поэтому зачем писать на старом и неудобном?)
@user-eq1dv9hr3s
@user-eq1dv9hr3s 5 лет назад
Неплохо бы закрывать терминал, когда объясняешь код. Закрыто пол экрана бесполезным окном
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо, учту!
@defaultse
@defaultse 5 лет назад
@@MobileDeveloper Чтобы код был лучше виден на видео попробуй Presentation mode в IDEA из меню View
@deni5n
@deni5n 4 года назад
Поставил минус и вот почему: в видео которое вроде как "полный обзор", вы много раз проговариваете одну и туже мысль - принцип действия этой библиотеки такойто.. что кажется понятно и из документации (там простой пример есть с кофемашиной) и для андроида сейчас сделали пример. Плюс, частенько на собственном же примере кода вы говорите, что используете старый подход (с билдером например) или инжектирование в презентер (незапомнил точно). Это все приводит к мысли, что код примеров несовершенен, а если так, то зачем это видео? В интернете есть куча статей с таким же устаревшим кодом. Если руководствоваться принципом: критикуя - предлагай, то напишите пример просторо приложения с нуля попутно объясняя что для чего используется и выложите код на github. или книгу - будет бестселлер, плюс ее перевыпукать можно т.к. даггер активно развивается.
@MobileDeveloper
@MobileDeveloper 4 года назад
Ваш комментарий шляпа и вот почему: в комменте которое вроде как срывает покровы вы много раз проговариваете одну и ту же мысль - видео плохое потому то, что кажется понятно и так (под подобными видео уже есть такие комменты) и для моего видео сделали отдельный коммент. Это все приводит к мысли, что ваш коммент тут не нужен, ведь в интернете полно таких критиков. Ну и критикуя - предлагай, поэтому я предлагаю вам уйти с этого канала и не тратить своё драгоценное время больше на комментарии и просмотр моих видео :) Спасибо!
@user-de6dd1dd8e
@user-de6dd1dd8e 3 года назад
На готовых примерах ничего не понятно. Нужно делать по шагам. Ещё с классами А, В, С.. и конструкторами понятно , а дальше - с места в карьер
@MobileDeveloper
@MobileDeveloper 3 года назад
Более пошагово есть на патреоне, в проекте TransportApp. Там же скоро будет про хилт )
@preenxus3425
@preenxus3425 5 лет назад
Так, ну я почитал опять, поисследовал инфу и вернулся. стало понятнее. но все равно непонятен момент. вы говорите, это экономит время, однако как я вижу, с даггер получается в 2 раза больше кода. так мне просто надо создать зависимость с помощью оператора new, а с даггер мне надо поаннатировать @Inject, создать компонент, создать модуль, вызвать inject(), еще и сбилдить разок. вон сколько шагов. так зачем тогда все это?
@preenxus3425
@preenxus3425 5 лет назад
вот например с тем же gson конвертером, о котором вы упоминаете в видео. без даггера я просто беру и передаю туда gsonconverter .addConverterFactory(GsonConverterFactory.create()) и мне не нужны никакие инжекты, модули, компоненты, даггеры. я не понимаю, о какой экономии речь?
@MobileDeveloper
@MobileDeveloper 5 лет назад
Отвечу сразу на оба вопроса. Впрочем, ответ есть и в видео, но поясню. Полезность библиотеки даггер прям пропорциональна глубине зависимостей. То есть если у вас класс А зависит от Б и В это просто можно создать А(Б(), В()), а если зависимости на 10 уровней глубже? Да в любом месте где вам понадобится верхнеуровневый класс вы замучаетесь создавать его зависимости. Проще их прописать один раз и дёргать везде где надо. Это можно сделать и благодаря фабрике конечно, но зачем велосипедить + даггер даёт и другие преимущества. Ну и ещё скажу что никто вас не принуждает использовать именно эту библиотеку для инверсии контроля или вообще использовать какую либо другую библиотеку. Решение, как за инженером, закреплено за вами. Я лишь делюсь своим опытом.
@preenxus3425
@preenxus3425 5 лет назад
@@MobileDeveloper так и вправду почему не сделать фабрику? что там ее делать? перечислить все зависимости и выдать объект.
@preenxus3425
@preenxus3425 5 лет назад
@@MobileDeveloper единственное, с даггером код тестируемее. но с тестами я еще не работал, поэтому хз в чем прелесть пока.
@MobileDeveloper
@MobileDeveloper 5 лет назад
Вас ведь никто не заставляет использовать даггер ) если вам удобнее фабрика используйте фабрику ) заодно лишних зависимостей в проект не затащите )
@user-ho4ey5rm1e
@user-ho4ey5rm1e 5 лет назад
можно исходники, покопаться
@MobileDeveloper
@MobileDeveloper 5 лет назад
Чуть позже
@manah7812
@manah7812 3 года назад
@@MobileDeveloper а уже можно пожалуйста?
@rtgtdscfgrthjkgf8388
@rtgtdscfgrthjkgf8388 Год назад
НИЧЕГО НЕ ПОНЯТНО, сделай пожалуйста отдельное видео где ты разберёшь код
@skynetif
@skynetif 4 года назад
Дагер не предоставляет инверсию, а иньекцию. Это разные вещи.
@MobileDeveloper
@MobileDeveloper 4 года назад
Мне ещё раз здесь продублировать про связь паттерна и инъекций? Только не удаляйте больше свой комментарий
@skynetif
@skynetif 4 года назад
@@MobileDeveloper Тогда при чем тут di библиотека, к инверсии ? Была показана по сути иньнекция, и вскользь упомянуто про интерфейс. Или я не внимательно смотрел? P.S. Удалил изза того что кнопкой промахнулся.
@MobileDeveloper
@MobileDeveloper 4 года назад
skynetif все просто одной из реализаций инверсии управления в применении к управлению зависимостями является внедрение зависимостей (англ. dependency injection). А тут нам помогает даггер
@skynetif
@skynetif 4 года назад
@@MobileDeveloper инверсия управления - да, но не инверсия зависимостей , IoC и dependency inversion на англ. А вы в видео говорили про инверсию зависимости.
@MobileDeveloper
@MobileDeveloper 4 года назад
Тогда значит оговорился, конечно я имел ввиду либо инверсию контроля либо инъекцию зависимостей в зависимости от контекста. Скиньте тайм метку если не сложно
@alexpetrov6700
@alexpetrov6700 5 лет назад
Вот тут не понял почти ничего((
@MobileDeveloper
@MobileDeveloper 5 лет назад
Это печально, значит мне не удалось донести. Может вы какой-то вопрос зададите? Ну что конкретно непонятно. Не бывает так, чтобы непонятно было все )
@alexpetrov6700
@alexpetrov6700 5 лет назад
@@MobileDeveloper самое печальное, что даже не могу поясснить что именно не понял) наверное просто в целом непонятно пока зачем это нужно, сначала кажется что только усложняет разработку dagger этот, хотя разумеется это не так) наверное мне лично не хватает каких то примеров типа вот без даггера мы будем писать это так и это будет долго а с даггером вот так и это будет быстро, удобно и изящно)
@MobileDeveloper
@MobileDeveloper 5 лет назад
Alex Petrov попробуйте посмотреть google architecture samples на гитхабе есть. Мб что-то прояснится. Как я уже говорил - жить можно и без даггера, но вам все равно придётся все зависимости протягивать
@mycanalcool
@mycanalcool 4 года назад
@@alexpetrov6700 “вот без даггера мы будем писать это так и это будет долго а с даггером вот так“ да, было б круто такое видео глянуть))
@sonar_devices
@sonar_devices 3 года назад
Долбанная громкая музыка...
@MobileDeveloper
@MobileDeveloper 3 года назад
EW8S Alex многие жаловались, поэтому в следующих роликах она сильно тише
@robertiskhakov7820
@robertiskhakov7820 2 года назад
вообще ниче не понятно. Почему нельзя было кратко все сделать. То что в DI можно запутаться раз 10 сказал
@MobileDeveloper
@MobileDeveloper 2 года назад
Ну возьми да сделай
@onegin5129
@onegin5129 4 года назад
Без примера создания тестового приложения с нуля, воспринимать сложно
@MobileDeveloper
@MobileDeveloper 3 года назад
Создание с нуля с использованием современного даггера есть на патреоне
@stanislavkorolev376
@stanislavkorolev376 3 года назад
ужасно и неудобно по сравнению с Koin
@MobileDeveloper
@MobileDeveloper 3 года назад
Возможно, но ей очень многие (почему-то) пользуются ) Например все те, у кого приложения до сих пор на Java. Поэтому видео может кому-то пригодиться)
@stanislavkorolev376
@stanislavkorolev376 3 года назад
@@MobileDeveloper согласен, например мне пригодилось, я не использовал Dagger, но увидел разницу
@MobileDeveloper
@MobileDeveloper 3 года назад
Он, со времен этого видео несколько трансформировался )
@InvincibleXXX
@InvincibleXXX 4 месяца назад
Столько бла бла примеров не понятных. Одно балабольство(
@Alex-qt6ji
@Alex-qt6ji 5 лет назад
Если хочешь больше лайков чем 6 и больше просмотров чем 53. То снимай видео покороче и без всяких этих А Б В. Это не реально. В чем проблема назвать классы именами Собака, Лапа Хвост Глаз.... Сделай музыку потише, мало того она ужасная, так еще и твой голос перебивает. Короче Просто возми и пересмотри свое видео 5 раз,от 0 сек до послнедней сам поймешь в чем проблема. Видео реально не о чем. Хотел узнать что такое Даггер 2, в итоге сижу и пишу о том что у тебя видно не о чем
@MobileDeveloper
@MobileDeveloper 5 лет назад
По пунктам: Спасибо большое буду еще рад профессиональным советам по раскрутке канала :) Насчет музыки отдельное спасибо - проверю. А насчет Dagger 2 очень жаль, что вы не смогли понять, что это такое, но вы можете задать вопрос в комментарии - я постараюсь более разжевано и развернуто объяснить ) Спасибо еще раз за критику )
@user-xl2tf4gq1g
@user-xl2tf4gq1g 5 лет назад
музыка хорошая
@MobileDeveloper
@MobileDeveloper 5 лет назад
Спасибо большое ))
Далее
💋🧠
00:38
Просмотров 35 тыс.
Dagger Component, Subcomponent, Scope, Reusable
22:38