44
Dagger 2 Лечим зависимости по методике :) Докладчик: Constantine Mars Senior Developer @ DataArt, Co-Organizer @ GDG Dnipro

Dagger2 - IT NonStop Voronezh 2016

Embed Size (px)

Citation preview

Page 1: Dagger2 - IT NonStop Voronezh 2016

Dagger 2 Лечим зависимости по методике :)

Докладчик: Constantine MarsSenior Developer @ DataArt,Co-Organizer @ GDG Dnipro

Page 2: Dagger2 - IT NonStop Voronezh 2016

Dependency Injection

Что, зачем, и когда это нужно

Page 3: Dagger2 - IT NonStop Voronezh 2016

Создание классов порождает...

• Композиция - не наследование

• Ссылки не будут пустовать

Page 4: Dagger2 - IT NonStop Voronezh 2016

Возможность создавать объекты...

Page 5: Dagger2 - IT NonStop Voronezh 2016

Создавать разные объекты...

Page 6: Dagger2 - IT NonStop Voronezh 2016

Комбинировать объекты(“композиция” объектов)...

Page 7: Dagger2 - IT NonStop Voronezh 2016

Использовать наследование и разнообразить композицию...

Page 8: Dagger2 - IT NonStop Voronezh 2016

И… Зависимости

Car depends on Engine. Engines may vary. We’ll probably need different engines for testing and production

Page 9: Dagger2 - IT NonStop Voronezh 2016

Dagger and JSR-330

Аннотация @Inject

Page 10: Dagger2 - IT NonStop Voronezh 2016

немного еще НЕ истории

• Dagger 2 - Google, Greg Kick

• Dagger - Square, Jake Wharthon

• Guice - Google, Jesse Wilson

Page 11: Dagger2 - IT NonStop Voronezh 2016

Inversion of Control

Invert your dependencies

Page 12: Dagger2 - IT NonStop Voronezh 2016

Reflection vs Compile time

• Dagger 2 vs Dagger 1

Page 13: Dagger2 - IT NonStop Voronezh 2016

JSR-330

Page 14: Dagger2 - IT NonStop Voronezh 2016

Puttin’ there piece of magic...

Page 15: Dagger2 - IT NonStop Voronezh 2016

Обратите внимание на конструктор по умолчанию

Page 16: Dagger2 - IT NonStop Voronezh 2016

А вот конструктор с параметрами- хорошее место для модификаций...

Page 17: Dagger2 - IT NonStop Voronezh 2016

И все же, как это заставить работать?

Page 18: Dagger2 - IT NonStop Voronezh 2016

Структура инжекции Dagger 2.0

Модули, Компоненты

Page 19: Dagger2 - IT NonStop Voronezh 2016

Компоненты и модули

Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/

Page 20: Dagger2 - IT NonStop Voronezh 2016

Модуль… next slide, please

Page 21: Dagger2 - IT NonStop Voronezh 2016

Модуль - коллекция генераторов

Page 22: Dagger2 - IT NonStop Voronezh 2016

Компонент - хост для модулей,

инжектор для классов,корень дерева зависимостей

Page 23: Dagger2 - IT NonStop Voronezh 2016

То же самое,только с красными стрелочками

:]

Page 24: Dagger2 - IT NonStop Voronezh 2016

Инициализация компонентаgenerated code used

Page 25: Dagger2 - IT NonStop Voronezh 2016

Inject This! :)

Puttin’ magic will work only after injection… ;)

Page 26: Dagger2 - IT NonStop Voronezh 2016

Inject This! :)

Page 27: Dagger2 - IT NonStop Voronezh 2016

Custom Scopes и эффективное управление памятью

Page 28: Dagger2 - IT NonStop Voronezh 2016

Жизненный цикл объектов

Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/

Page 29: Dagger2 - IT NonStop Voronezh 2016

И еще раз та же матрешкаКомпонент имеет область жизни (scope)

Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/

Page 30: Dagger2 - IT NonStop Voronezh 2016

This mysterious ‘plus’...

Page 31: Dagger2 - IT NonStop Voronezh 2016

Объявление суп-компонента

Page 32: Dagger2 - IT NonStop Voronezh 2016

Но ведь там был модуль! =)

Page 33: Dagger2 - IT NonStop Voronezh 2016

Добавление субкомпонента к корню

дерева зависимостей

Page 34: Dagger2 - IT NonStop Voronezh 2016

Как управлять временем жизни субкомпонентов?

Pic. author - Miroslaw Stanek from Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/

Page 35: Dagger2 - IT NonStop Voronezh 2016

Аннотация @Scope

Page 36: Dagger2 - IT NonStop Voronezh 2016

@ActivityScope

Page 37: Dagger2 - IT NonStop Voronezh 2016

@ActivityScope

Page 38: Dagger2 - IT NonStop Voronezh 2016

@UserScope

Page 39: Dagger2 - IT NonStop Voronezh 2016

@UserScope

Page 40: Dagger2 - IT NonStop Voronezh 2016

@UserScope

Page 41: Dagger2 - IT NonStop Voronezh 2016

Напоследок… Что инжектить?

• Модули демо-данных

• Презентеры

• Синглетоны

• Тестовые реализации классов

• ...Все остальное что инстанцируется и создает зависимости :)

Page 42: Dagger2 - IT NonStop Voronezh 2016

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

Смысл кода

Как мы организовали быструю Agile-разработку с использованием Mock-модулей, и в итоге обгонали сервер-сайд