SlideShare a Scribd company logo
1 of 58
Download to read offline
ВАМ ПРИВЕТ
ЗАЧЕМ НАМ DAGGER
или проблемы с точечной застройкой в больших городах
Олег Долгих,
Improve Digital
О чем:
1
экран
1
запрос
• Немного SOLID
• Модульность и уровни абстракции
• Dependency Injection
• Dagger 2
Хотелки
1
экран
1
запрос
SOLID
SSingle responsibility principle
(принцип единственной
обязанности)
У класса должна быть всего
одна причина изменяться
OOpen/closed principle
(принцип открытости/
закрытости)
Классы должны быть
открыты для раширения, но
закрыты для изменения
L Liskov substitution principle
(принцип подстановки
Барбары Лисков)
Наследующий класс должен
дополнять, а не замещать
поведение базового класса
I Interface segregation principle
(принцип разделения
интерфейса)
Клиенты не должны зависеть
от методов, которые они не
используют
DDependency inversion principle
(принцип инверсии
зависимостей)
Код должен зависеть от
абстракций, а не от
конкретных классов
DDependency inversion principle
(принцип инверсии
зависимостей)
DIP определяет отношение этих трех сущностей так:
a) Клиент ничего не должен знать о реализации модуля.
Он имеет дело только с интерфейсом;
b) Реализация модуля не должна знать о клиенте. Она
предоставляет функциональность и реализует
определенный интерфейс;
c) Интерфейс не должен зависеть от реализации. Он
вообще не должен знать о ней;
d) Реализация должна зависеть от интерфейса;
ДУЛЬ
МО
НОСТЬ
Как хотели: Как получилось:
Проблема доступа к модулям:
При вызове конструктора получится, что
модуль зависит от конкретного места его
применения.
Если в коде используются
многочисленные конкретные классы, его
придется изменять с добавлением новых
конкретных классов.
Dependency Injection
Service Locator
1. Service Locator
1. Service Locator
• Неясный контракт класса
Сервис-локатор многие считают анти-паттерном:
• Неопределенная сложность класса
2. Использовать механизм Dependency injection
Три пути, которыми мы можем доставить классу
нужные параметры:
1) Constructor Injection (инъекция в конструктор)
2. Использовать механизм dependency injection
Три пути, которыми мы можем доставить классу
нужные параметры:
2) Field Injection (инъекция в поле)
2. Использовать механизм dependency injection
Три пути, которыми мы можем доставить классу
нужные параметры:
3) Method Injection (инъекция в метод)
ПРИЧЕМ
ЗДЕСЬ
ТОЧЕЧНАЯ
ЗАСТРОЙКА
Как хотели: Как получилось:
Хочу здесь детский
садик!
UserManager
UserStore ApiService
UserManager
UserStore ApiService
Модуль с детским
садиком перемещаем
по любому адресу
Меняем код с использованием паттерна Constructor
Injection, и передадим зависимости в UserManager в
качестве параметров
Меняем код с использованием паттерна Constructor
Injection, и передадим зависимости в UserManager в
качестве параметров
Наш UserManager
больше не зависит от
реализаций ApiService и
UserStore
UserManager
UserStore ApiService
Мы просто можем «замокать» реализации ApiService
и UserStore. UserStore теперь полностью независим.
DI
ФРЕЙМВОРКИ
• Runtime валидация графа зависимостей
• reflection
Dagger 2:
• Никакого reflection
• Compiletime валидация графа зависимостей.
• Классная кодогенерация.
Guice, RoboGuice, Spring, PicoContainer …
Dagger 1:
• Compile-time валидация графа зависимостей
• Избавлен от кучи reflection, но по прежнему
использует ее для загрузки сгенерированных классов
Новый взгляд на LoginActivity
Dagger API
@Module
@Provides
@Scope
Определяем методы
которые будут
предоставлять
зависимости в классе с
аннотацией @Module и
аннотируем их
@Provides. Если хотим
ограничить область
видимости – помечаем
аннотацией @Scope
Dagger API
@Component
@Subcomponent — мост
между модулями и
клиентами зависимостей.
Определяет какие модули
будут предоставлять
зависимости. Указываем
куда хотим инжектить
и/или геттер, который
вернет зависимость.
Dagger API
@Inject — пометить Конструктор, Поле, Метод для инъекции
Dagger API
@MapKey — определить коллекцию
зависимостей
@Qualifier — тегируем зависимости,
которые имеют один и тот же
интерфейс.
@Lazy — ленивая инициализация
зависимости.
Итого:
• Не забывайте про SOLID принципы
• Пишите модульный код
• Не переабстрагируйтесь
• Предпочитайте DI сервис локатору
• DI framework в android – Dagger 2
Минусы
• Повышается порог вхождения
Спасибо за внимание
Если у вас возникли вопросы, я с удовольствием
обсужу их с вами.
Олег Долгих,
Android-разработчик Improve Digital
Ресурсы:
• https://blog.gouline.net/2015/05/04/dagger-2-even-sharper-less-square/
• https://github.com/codepath/android_guides/wiki/Dependency-Injection-with-Dagger-2
• http://frogermcs.github.io/dependency-injection-with-dagger-2-custom-scopes/
• http://sergeyteplyakov.blogspot.ru/2013/03/di-service-locator.html
• http://sergeyteplyakov.blogspot.ru/2012/12/di-constructor-injection.html
• http://sergeyteplyakov.blogspot.ru/2013/01/di-property-injection.html
• http://sergeyteplyakov.blogspot.ru/2013/02/di-method-injection.html
• https://events.yandex.ru/lib/talks/3109/
• https://www.youtube.com/watch?v=3Fn4vb1wBIs

More Related Content

Viewers also liked

Dia internacional de la mujer
Dia internacional de la mujerDia internacional de la mujer
Dia internacional de la mujerMiranda Garcia
 
Cyber for Beginners v2
Cyber for Beginners v2Cyber for Beginners v2
Cyber for Beginners v2Kenny Boddye
 
Las Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones EducativasLas Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones Educativasyelgimanuelp
 
REBNY Seminar Presentation (1)
REBNY Seminar Presentation (1)REBNY Seminar Presentation (1)
REBNY Seminar Presentation (1)Kenny Boddye
 
Las Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones EducativasLas Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones Educativasyelgimanuelp
 
Gitex Technology Week 2016 - Hiteshi Technologies
Gitex Technology Week 2016 - Hiteshi TechnologiesGitex Technology Week 2016 - Hiteshi Technologies
Gitex Technology Week 2016 - Hiteshi TechnologiesHiteshi
 
20 Important Questions to Ask When Volunteering
20 Important Questions to Ask When Volunteering20 Important Questions to Ask When Volunteering
20 Important Questions to Ask When VolunteeringDebbie Ray, CVA
 
From Push to Pull: Digital Transformation of Mobile Advertising
From Push to Pull: Digital Transformation of Mobile AdvertisingFrom Push to Pull: Digital Transformation of Mobile Advertising
From Push to Pull: Digital Transformation of Mobile AdvertisingHiteshi
 
The new features of excel 2016
The new features of excel 2016The new features of excel 2016
The new features of excel 2016Hajir H
 
The new features of excel 2016
The new features of excel 2016The new features of excel 2016
The new features of excel 2016Hajir H
 

Viewers also liked (13)

Scala on android
Scala on androidScala on android
Scala on android
 
Dia internacional de la mujer
Dia internacional de la mujerDia internacional de la mujer
Dia internacional de la mujer
 
Cyber for Beginners v2
Cyber for Beginners v2Cyber for Beginners v2
Cyber for Beginners v2
 
Las Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones EducativasLas Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones Educativas
 
REBNY Seminar Presentation (1)
REBNY Seminar Presentation (1)REBNY Seminar Presentation (1)
REBNY Seminar Presentation (1)
 
Las Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones EducativasLas Tic y sus Implicaciones Educativas
Las Tic y sus Implicaciones Educativas
 
Gitex Technology Week 2016 - Hiteshi Technologies
Gitex Technology Week 2016 - Hiteshi TechnologiesGitex Technology Week 2016 - Hiteshi Technologies
Gitex Technology Week 2016 - Hiteshi Technologies
 
P1 P2 mock quiz
P1 P2 mock quizP1 P2 mock quiz
P1 P2 mock quiz
 
20 Important Questions to Ask When Volunteering
20 Important Questions to Ask When Volunteering20 Important Questions to Ask When Volunteering
20 Important Questions to Ask When Volunteering
 
From Push to Pull: Digital Transformation of Mobile Advertising
From Push to Pull: Digital Transformation of Mobile AdvertisingFrom Push to Pull: Digital Transformation of Mobile Advertising
From Push to Pull: Digital Transformation of Mobile Advertising
 
La amistad
La amistadLa amistad
La amistad
 
The new features of excel 2016
The new features of excel 2016The new features of excel 2016
The new features of excel 2016
 
The new features of excel 2016
The new features of excel 2016The new features of excel 2016
The new features of excel 2016
 

Similar to Проблемы точечной застройки в больших городах или зачем нужен Dagger

SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаPavel Treshnikov
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSQALab
 
Инъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия КонтроляИнъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия КонтроляVladimir Ignatev
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASPdevel123
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»MskDotNet Community
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Yulia Tsisyk
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеAlexander Byndyu
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, ЯндексYandex
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыdmalykhanov
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, ЯндексYandex
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllMykyta Hopkalo
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf Conference
 
Практическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyПрактическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyProvectus
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных системDima Dzuba
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview Kseniya Redunova
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Ontico
 

Similar to Проблемы точечной застройки в больших городах или зачем нужен Dagger (20)

Design principles
Design principles Design principles
Design principles
 
Solid code via tdd
Solid code via tddSolid code via tdd
Solid code via tdd
 
SOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайнаSOLID – принципы объектно-ориентированного дизайна
SOLID – принципы объектно-ориентированного дизайна
 
SOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработкаSOLIDарность: Тестирование как разработка
SOLIDарность: Тестирование как разработка
 
Инъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия КонтроляИнъекция зависимости и Инверсия Контроля
Инъекция зависимости и Инверсия Контроля
 
SOLID & GRASP
SOLID & GRASPSOLID & GRASP
SOLID & GRASP
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений» Кирилл Маурин «Проектирование и разработка модульных приложений»
Кирилл Маурин «Проектирование и разработка модульных приложений»
 
Netpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHPNetpeak Talks #3: Масштабируемое приложение на PHP
Netpeak Talks #3: Масштабируемое приложение на PHP
 
Эволюция управления зависимостями в коде
Эволюция управления зависимостями в кодеЭволюция управления зависимостями в коде
Эволюция управления зависимостями в коде
 
"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс"Рекомендации по проектированию API". Марина Степанова, Яндекс
"Рекомендации по проектированию API". Марина Степанова, Яндекс
 
JEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советыJEE Conf: Архитектура Android приложений: полезные и вредные советы
JEE Conf: Архитектура Android приложений: полезные и вредные советы
 
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс"Рекомендации по проектированию API" — Марина Степанова, Яндекс
"Рекомендации по проектированию API" — Марина Степанова, Яндекс
 
Benefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controllBenefits of unit-testing and inversion of controll
Benefits of unit-testing and inversion of controll
 
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
ZFConf 2011: Гибкая архитектура Zend Framework приложений с использованием De...
 
Практическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере RubyПрактическое применение принципа инверсии зависимостей на примере Ruby
Практическое применение принципа инверсии зависимостей на примере Ruby
 
SOLID
SOLIDSOLID
SOLID
 
Модифицируемость программных систем
Модифицируемость программных системМодифицируемость программных систем
Модифицируемость программных систем
 
JavaScript design patterns overview
JavaScript design patterns overview JavaScript design patterns overview
JavaScript design patterns overview
 
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
Чистая архитектура с VIPER / Сергей Крапивенский (Rambler&Co)
 

Проблемы точечной застройки в больших городах или зачем нужен Dagger