Android: Dagger 2 Flashcards
Что такое Dagger 2
Dagger 2 представляет собой библиотеку, которая помогает разработчику реализовать паттерн Внедрение зависимости (Dependency Injection), который в свою очередь является “специфичной формой инверсии управления (Inversion of control)”.
Принципы инверсии управления?
Модули верхних уровней не должны зависеть от модулей нижних уровней. Модули обоих уровней должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Недостатки дизайна, которые устраняются с применением Инверсии управления?
Жесткость. Изменение одного модуля ведет к изменению других модулей.
Хрупкость. Изменения в одной части приводят к неконтролируемым ошибкам в других частях программы.
Неподвижность. Модуль сложно отделить от остальной части приложения для повторного использования.
Преимущества Dagger 2 Вы знаете?
- Простой доступ к “расшаренным” реализациям.
- Простая настройка сложных зависимостей. Чем больше у вас приложение, тем больше становится зависимостей. Dagger 2 позволяет вам по-прежнему легко контролировать все зависимости.
- Облегчение Юнит-тестирования и интеграционного тестирования.
- “Локальные” синглтоны.
- Кодогенерация. Полученный код понятен и доступен для отладки.
- Никаких проблем при обфускации.
- Малые размеры библиотеки
Основные элементы(аннотации) Dagger 2
@Inject – базовая аннотация, с помощью которой “запрашивается зависимость”
@Module – классы, чьи методы “предоставляют зависимости”
@Provide – методы внутри @Module, “говорящие Dagger, как мы хотим сконструировать и предоставить зависимость“
@Component – мост между @Inject и @Module
@Scope – предоставляют возможность создания глобальных и “локальных синглтонов”
@Qualifier – если необходимы разные объекты одного типа
Можно ли инжектить null?
Да, если добавить к @Provide еще аннотацию @Nullable