Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

Создание классов порождает... • Композиция - не наследование • Ссылки не будут пустовать

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

И… Зависимости Car depends on Engine. Engines may vary. We’ll probably need different engines for testing and production

Slide 9

Slide 9 text

Dagger and JSR-330 Аннотация @Inject

Slide 10

Slide 10 text

немного еще НЕ истории • Dagger 2 - Google, Greg Kick • Dagger - Square, Jake Wharthon • Guice - Google, Jesse Wilson

Slide 11

Slide 11 text

Inversion of Control Invert your dependencies

Slide 12

Slide 12 text

Reflection vs Compile time • Dagger 2 vs Dagger 1

Slide 13

Slide 13 text

JSR-330

Slide 14

Slide 14 text

Puttin’ there piece of magic...

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Структура инжекции Dagger 2.0 Модули, Компоненты

Slide 19

Slide 19 text

Компоненты и модули Pic. author - Miroslaw Stanek from Azimo http://frogermcs.github.io/dagger-graph-creation-performance/

Slide 20

Slide 20 text

Модуль… next slide, please

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Компонент - хост для модулей, инжектор для классов, корень дерева зависимостей

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

Inject This! :) Puttin’ magic will work only after injection… ;)

Slide 26

Slide 26 text

Inject This! :)

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

Жизненный цикл объектов Pic. author - Miroslaw Stanek from Azimo http://frogermcs.github.io/dagger-graph-creation-performance/

Slide 29

Slide 29 text

И еще раз та же матрешка Компонент имеет область жизни (scope) Pic. author - Miroslaw Stanek from Azimo http://frogermcs.github.io/dagger-graph-creation-performance/

Slide 30

Slide 30 text

This mysterious ‘plus’...

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

Как управлять временем жизни субкомпонентов? Pic. author - Miroslaw Stanek from Azimo http://frogermcs.github.io/dagger-graph-creation-performance/

Slide 35

Slide 35 text

Аннотация @Scope

Slide 36

Slide 36 text

@ActivityScope

Slide 37

Slide 37 text

@ActivityScope

Slide 38

Slide 38 text

@UserScope

Slide 39

Slide 39 text

@UserScope

Slide 40

Slide 40 text

@UserScope

Slide 41

Slide 41 text

Напоследок… Что инжектить? • Модули демо-данных • Презентеры • Синглетоны • Тестовые реализации классов • ...Все остальное что инстанцируется и создает зависимости :)

Slide 42

Slide 42 text

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/

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

Всем спасибо! Contact me: [email protected] +ConstantineMars