SlideShare a Scribd company logo
1 of 44
Download to read offline
Dagger 2
Лечим зависимости
по методике
:)
Докладчик: Constantine
Mars
Senior Developer @ DataArt,
Co-Organizer @ GDG Dnipro
Dependency Injection
Что, зачем, и когда это нужно
Создание классов порождает...
• Композиция - не наследование
• Ссылки не будут пустовать
Возможность создавать объекты...
Создавать разные объекты...
Комбинировать объекты
(“композиция” объектов)...
Использовать наследование
и разнообразить композицию...
И… Зависимости
Car depends on Engine. Engines may vary. We’ll probably
need different engines for testing and production
Dagger and JSR-330
Аннотация @Inject
немного еще НЕ истории
• Dagger 2 - Google, Greg Kick
• Dagger - Square, Jake Wharthon
• Guice - Google, Jesse Wilson
Inversion of Control
Invert your dependencies
Reflection vs Compile time
• Dagger 2 vs Dagger 1
JSR-330
Puttin’ there piece of magic...
Обратите внимание
на конструктор по умолчанию
А вот конструктор с параметрами
- хорошее место для модификаций...
И все же, как это заставить работать?
Структура инжекции
Dagger 2.0
Модули, Компоненты
Компоненты и модули
Pic. author - Miroslaw Stanek from Azimo
http://frogermcs.github.io/dagger-graph-creation-performance/
Модуль…
next slide, please
Модуль - коллекция генераторов
Компонент -
хост для модулей,
инжектор для классов,
корень дерева зависимостей
То же самое,
только с красными стрелочками
:]
Инициализация компонента
generated code used
Inject This! :)
Puttin’ magic will work only after injection… ;)
Inject This! :)
Custom Scopes
и эффективное
управление памятью
Жизненный цикл объектов
Pic. author - Miroslaw Stanek from Azimo
http://frogermcs.github.io/dagger-graph-creation-performance/
И еще раз та же матрешка
Компонент имеет область жизни (scope)
Pic. author - Miroslaw Stanek from Azimo
http://frogermcs.github.io/dagger-graph-creation-performance/
This mysterious ‘plus’...
Объявление суп-компонента
Но ведь там был модуль! =)
Добавление субкомпонента
к корню
дерева зависимостей
Как управлять временем жизни
субкомпонентов?
Pic. author - Miroslaw Stanek from Azimo
http://frogermcs.github.io/dagger-graph-creation-performance/
Аннотация @Scope
@ActivityScope
@ActivityScope
@UserScope
@UserScope
@UserScope
Напоследок… Что инжектить?
• Модули демо-данных
• Презентеры
• Синглетоны
• Тестовые реализации классов
• ...Все остальное что инстанцируется и создает
зависимости :)
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/
Смысл кода
Как мы организовали быструю Agile-разработку с
использованием Mock-модулей, и в итоге
обгонали сервер-сайд
Всем спасибо!
Contact me:
constantine.mars@gmail.com
+ConstantineMars

More Related Content

Viewers also liked

5 indian mathematicians
5 indian mathematicians5 indian mathematicians
5 indian mathematiciansRohit Kumar
 
Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...
Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...
Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...Adam's Fine Art Auctioneers
 
Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015Piotr Biegun
 
#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...
#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...
#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...Rémi Bachelet
 
Moderne App-Architektur mit Dagger2 und RxJava
Moderne App-Architektur mit Dagger2 und RxJavaModerne App-Architektur mit Dagger2 und RxJava
Moderne App-Architektur mit Dagger2 und RxJavainovex GmbH
 
Food and the Planet – Sustainable Food Lab
Food and the Planet – Sustainable Food LabFood and the Planet – Sustainable Food Lab
Food and the Planet – Sustainable Food LabSustainable Food Systems
 
Determinante, adjetivo, etc
Determinante, adjetivo, etcDeterminante, adjetivo, etc
Determinante, adjetivo, etcsaos2829
 
Project Sustainability Video
Project  Sustainability VideoProject  Sustainability Video
Project Sustainability VideoColleen Hodgins
 
Formation stratégie de présence reseaux sociaux
Formation stratégie de présence reseaux sociauxFormation stratégie de présence reseaux sociaux
Formation stratégie de présence reseaux sociauxAurelie GASTINEAU
 
Emulation of Dynamic Adaptive Streaming over HTTP with Mininet
Emulation of Dynamic Adaptive Streaming over HTTP with MininetEmulation of Dynamic Adaptive Streaming over HTTP with Mininet
Emulation of Dynamic Adaptive Streaming over HTTP with MininetAnatoliy Zabrovskiy
 

Viewers also liked (15)

5 indian mathematicians
5 indian mathematicians5 indian mathematicians
5 indian mathematicians
 
Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...
Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...
Adam's At Home 18th September 2016 - An Auction of Fine & Unique Interior Fur...
 
Adams Important Irish Art 1st June 2016
Adams Important Irish Art 1st June 2016Adams Important Irish Art 1st June 2016
Adams Important Irish Art 1st June 2016
 
Programación de arte primero
Programación de arte primeroProgramación de arte primero
Programación de arte primero
 
Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015Zapowiedź raportu - Stan Androida w Polsce 2015
Zapowiedź raportu - Stan Androida w Polsce 2015
 
#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...
#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...
#MOOCGdP – 1 « pourquoi » - cadrage du mooc gestion de projet - r bachelet 01...
 
Moderne App-Architektur mit Dagger2 und RxJava
Moderne App-Architektur mit Dagger2 und RxJavaModerne App-Architektur mit Dagger2 und RxJava
Moderne App-Architektur mit Dagger2 und RxJava
 
Food and the Planet – Sustainable Food Lab
Food and the Planet – Sustainable Food LabFood and the Planet – Sustainable Food Lab
Food and the Planet – Sustainable Food Lab
 
Determinante, adjetivo, etc
Determinante, adjetivo, etcDeterminante, adjetivo, etc
Determinante, adjetivo, etc
 
Project Sustainability Video
Project  Sustainability VideoProject  Sustainability Video
Project Sustainability Video
 
Sustainability Plan Presentation
Sustainability Plan PresentationSustainability Plan Presentation
Sustainability Plan Presentation
 
DI with Dagger2
DI with Dagger2DI with Dagger2
DI with Dagger2
 
Formation stratégie de présence reseaux sociaux
Formation stratégie de présence reseaux sociauxFormation stratégie de présence reseaux sociaux
Formation stratégie de présence reseaux sociaux
 
Emulation of Dynamic Adaptive Streaming over HTTP with Mininet
Emulation of Dynamic Adaptive Streaming over HTTP with MininetEmulation of Dynamic Adaptive Streaming over HTTP with Mininet
Emulation of Dynamic Adaptive Streaming over HTTP with Mininet
 
Examen físico de extremidades
Examen físico de extremidadesExamen físico de extremidades
Examen físico de extremidades
 

More from Constantine Mars

Mobile Applications Architecture - GDG Ternopil' Architecture Components Meetup
Mobile Applications Architecture - GDG Ternopil' Architecture Components MeetupMobile Applications Architecture - GDG Ternopil' Architecture Components Meetup
Mobile Applications Architecture - GDG Ternopil' Architecture Components MeetupConstantine Mars
 
Quick look at Design Patterns in Android Development
Quick look at Design Patterns in Android DevelopmentQuick look at Design Patterns in Android Development
Quick look at Design Patterns in Android DevelopmentConstantine Mars
 
Dagger 2 - Ciklum Speakers' Corner
Dagger 2 - Ciklum Speakers' CornerDagger 2 - Ciklum Speakers' Corner
Dagger 2 - Ciklum Speakers' CornerConstantine Mars
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT TalkConstantine Mars
 
Jump into cross platform development with firebase
Jump into cross platform development with firebaseJump into cross platform development with firebase
Jump into cross platform development with firebaseConstantine Mars
 
Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...
Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...
Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...Constantine Mars
 
Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016
Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016
Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016Constantine Mars
 
DeviceHive Android BLE Gateway
DeviceHive Android BLE GatewayDeviceHive Android BLE Gateway
DeviceHive Android BLE GatewayConstantine Mars
 
Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016
Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016
Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016Constantine Mars
 
RxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArtRxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArtConstantine Mars
 
Android Wear 2.0 - IT NonStop Dnipro
Android Wear 2.0 - IT NonStop DniproAndroid Wear 2.0 - IT NonStop Dnipro
Android Wear 2.0 - IT NonStop DniproConstantine Mars
 
Android N Security Overview - Mobile Security Saturday at Ciklum
Android N Security Overview - Mobile Security Saturday at CiklumAndroid N Security Overview - Mobile Security Saturday at Ciklum
Android N Security Overview - Mobile Security Saturday at CiklumConstantine Mars
 
Study Jam: Android for Beginners, Summary
Study Jam: Android for Beginners, SummaryStudy Jam: Android for Beginners, Summary
Study Jam: Android for Beginners, SummaryConstantine Mars
 
RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015Constantine Mars
 

More from Constantine Mars (17)

Mobile Applications Architecture - GDG Ternopil' Architecture Components Meetup
Mobile Applications Architecture - GDG Ternopil' Architecture Components MeetupMobile Applications Architecture - GDG Ternopil' Architecture Components Meetup
Mobile Applications Architecture - GDG Ternopil' Architecture Components Meetup
 
Quick look at Design Patterns in Android Development
Quick look at Design Patterns in Android DevelopmentQuick look at Design Patterns in Android Development
Quick look at Design Patterns in Android Development
 
Dagger 2 - Ciklum Speakers' Corner
Dagger 2 - Ciklum Speakers' CornerDagger 2 - Ciklum Speakers' Corner
Dagger 2 - Ciklum Speakers' Corner
 
Architecture components - IT Talk
Architecture components - IT TalkArchitecture components - IT Talk
Architecture components - IT Talk
 
Jump into cross platform development with firebase
Jump into cross platform development with firebaseJump into cross platform development with firebase
Jump into cross platform development with firebase
 
Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...
Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...
Android Wear 2.0 - New Level of Freedom for Your Action - GDG CEE Leads Summi...
 
Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016
Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016
Android Wear 2.0 - Great Changes Upcoming This Fall - GDG DevFest Ukraine 2016
 
DeviceHive Android BLE Gateway
DeviceHive Android BLE GatewayDeviceHive Android BLE Gateway
DeviceHive Android BLE Gateway
 
Scrum Overview
Scrum OverviewScrum Overview
Scrum Overview
 
Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016
Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016
Android Wear 2.0, Awareness API - GDG Dnipro Post I/O 2016
 
RxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArtRxJava for Android - GDG and DataArt
RxJava for Android - GDG and DataArt
 
Android Wear 2.0 - IT NonStop Dnipro
Android Wear 2.0 - IT NonStop DniproAndroid Wear 2.0 - IT NonStop Dnipro
Android Wear 2.0 - IT NonStop Dnipro
 
Android N Security Overview - Mobile Security Saturday at Ciklum
Android N Security Overview - Mobile Security Saturday at CiklumAndroid N Security Overview - Mobile Security Saturday at Ciklum
Android N Security Overview - Mobile Security Saturday at Ciklum
 
Study Jam: Android for Beginners, Summary
Study Jam: Android for Beginners, SummaryStudy Jam: Android for Beginners, Summary
Study Jam: Android for Beginners, Summary
 
Pebble Watch Development
Pebble Watch DevelopmentPebble Watch Development
Pebble Watch Development
 
Xamarin Forms in Action
Xamarin Forms in ActionXamarin Forms in Action
Xamarin Forms in Action
 
RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015RxJava for Android - GDG DevFest Ukraine 2015
RxJava for Android - GDG DevFest Ukraine 2015
 

Dagger2 - IT NonStop Voronezh 2016