Download - Dagger2 - IT NonStop Voronezh 2016
![Page 1: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/1.jpg)
Dagger 2 Лечим зависимости по методике :)
Докладчик: Constantine MarsSenior Developer @ DataArt,Co-Organizer @ GDG Dnipro
![Page 2: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/2.jpg)
Dependency Injection
Что, зачем, и когда это нужно
![Page 3: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/3.jpg)
Создание классов порождает...
• Композиция - не наследование
• Ссылки не будут пустовать
![Page 4: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/4.jpg)
Возможность создавать объекты...
![Page 5: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/5.jpg)
Создавать разные объекты...
![Page 6: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/6.jpg)
Комбинировать объекты(“композиция” объектов)...
![Page 7: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/7.jpg)
Использовать наследование и разнообразить композицию...
![Page 8: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/8.jpg)
И… Зависимости
Car depends on Engine. Engines may vary. We’ll probably need different engines for testing and production
![Page 9: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/9.jpg)
Dagger and JSR-330
Аннотация @Inject
![Page 10: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/10.jpg)
немного еще НЕ истории
• Dagger 2 - Google, Greg Kick
• Dagger - Square, Jake Wharthon
• Guice - Google, Jesse Wilson
![Page 11: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/11.jpg)
Inversion of Control
Invert your dependencies
![Page 12: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/12.jpg)
Reflection vs Compile time
• Dagger 2 vs Dagger 1
![Page 13: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/13.jpg)
JSR-330
![Page 14: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/14.jpg)
Puttin’ there piece of magic...
![Page 15: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/15.jpg)
Обратите внимание на конструктор по умолчанию
![Page 16: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/16.jpg)
А вот конструктор с параметрами- хорошее место для модификаций...
![Page 17: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/17.jpg)
И все же, как это заставить работать?
![Page 18: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/18.jpg)
Структура инжекции Dagger 2.0
Модули, Компоненты
![Page 19: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/19.jpg)
Компоненты и модули
Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/
![Page 20: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/20.jpg)
Модуль… next slide, please
![Page 21: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/21.jpg)
Модуль - коллекция генераторов
![Page 22: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/22.jpg)
Компонент - хост для модулей,
инжектор для классов,корень дерева зависимостей
![Page 23: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/23.jpg)
То же самое,только с красными стрелочками
:]
![Page 24: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/24.jpg)
Инициализация компонентаgenerated code used
![Page 25: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/25.jpg)
Inject This! :)
Puttin’ magic will work only after injection… ;)
![Page 26: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/26.jpg)
Inject This! :)
![Page 27: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/27.jpg)
Custom Scopes и эффективное управление памятью
![Page 28: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/28.jpg)
Жизненный цикл объектов
Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/
![Page 29: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/29.jpg)
И еще раз та же матрешкаКомпонент имеет область жизни (scope)
Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/
![Page 30: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/30.jpg)
This mysterious ‘plus’...
![Page 31: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/31.jpg)
Объявление суп-компонента
![Page 32: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/32.jpg)
Но ведь там был модуль! =)
![Page 33: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/33.jpg)
Добавление субкомпонента к корню
дерева зависимостей
![Page 34: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/34.jpg)
Как управлять временем жизни субкомпонентов?
Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/
![Page 35: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/35.jpg)
Аннотация @Scope
![Page 36: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/36.jpg)
@ActivityScope
![Page 37: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/37.jpg)
@ActivityScope
![Page 38: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/38.jpg)
@UserScope
![Page 39: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/39.jpg)
@UserScope
![Page 40: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/40.jpg)
@UserScope
![Page 41: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/41.jpg)
Напоследок… Что инжектить?
• Модули демо-данных
• Презентеры
• Синглетоны
• Тестовые реализации классов
• ...Все остальное что инстанцируется и создает зависимости :)
![Page 42: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/42.jpg)
Home readings
Sample code: https://github.com/c-mars/Dagger2Scopes.git
• Fernando Cejas “Tasting Dagger 2 on Android”: http://fernandocejas.com/2015/04/11/tasting-dagger-2-on-android/
•• Miroslaw Stanek “Dagger2 - graph creation performance:
http://frogermcs.github.io/dagger-graph-creation-performance/ •• Dagger2 official page: http://google.github.io/dagger/
![Page 43: Dagger2 - IT NonStop Voronezh 2016](https://reader031.vdocuments.pub/reader031/viewer/2022022202/587e32101a28abb93e8b726b/html5/thumbnails/43.jpg)
Смысл кода
Как мы организовали быструю Agile-разработку с использованием Mock-модулей, и в итоге обгонали сервер-сайд