Dagger2 - IT NonStop Voronezh 2016

Preview:

Citation preview

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

Докладчик: Constantine MarsSenior 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 Azimohttp://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 Azimohttp://frogermcs.github.io/dagger-graph-creation-performance/

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

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

This mysterious ‘plus’...

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

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

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

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

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

Pic. author - Miroslaw Stanek from Azimohttp://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-модулей, и в итоге обгонали сервер-сайд

Recommended