Android: Dagger 2 Flashcards

1
Q

Что такое Dagger 2

A

Dagger 2 представляет собой библиотеку, которая помогает разработчику реализовать паттерн Внедрение зависимости (Dependency Injection), который в свою очередь является “специфичной формой инверсии управления (Inversion of control)”.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Принципы инверсии управления?

A

Модули верхних уровней не должны зависеть от модулей нижних уровней. Модули обоих уровней должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Недостатки дизайна, которые устраняются с применением Инверсии управления?

A

Жесткость. Изменение одного модуля ведет к изменению других модулей.
Хрупкость. Изменения в одной части приводят к неконтролируемым ошибкам в других частях программы.
Неподвижность. Модуль сложно отделить от остальной части приложения для повторного использования.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Преимущества Dagger 2 Вы знаете?

A
  • Простой доступ к “расшаренным” реализациям.
  • Простая настройка сложных зависимостей. Чем больше у вас приложение, тем больше становится зависимостей. Dagger 2 позволяет вам по-прежнему легко контролировать все зависимости.
  • Облегчение Юнит-тестирования и интеграционного тестирования.
  • “Локальные” синглтоны.
  • Кодогенерация. Полученный код понятен и доступен для отладки.
  • Никаких проблем при обфускации.
  • Малые размеры библиотеки
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Основные элементы(аннотации) Dagger 2

A

@Inject – базовая аннотация, с помощью которой “запрашивается зависимость”
@Module – классы, чьи методы “предоставляют зависимости”
@Provide – методы внутри @Module, “говорящие Dagger, как мы хотим сконструировать и предоставить зависимость“
@Component – мост между @Inject и @Module
@Scope – предоставляют возможность создания глобальных и “локальных синглтонов”
@Qualifier – если необходимы разные объекты одного типа

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Можно ли инжектить null?

A

Да, если добавить к @Provide еще аннотацию @Nullable

How well did you know this?
1
Not at all
2
3
4
5
Perfectly