dagger2 - it nonstop voronezh 2016
Post on 17-Jan-2017
31 Views
Preview:
TRANSCRIPT
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-модулей, и в итоге обгонали сервер-сайд
Всем спасибо!
Contact me:constantine.mars@gmail.com+ConstantineMars
top related