Инъекция зависимостей

Инъекция зависимостей

20.10.2017

Как часто вам приходится вносить изменения в работу, после того как этой самой работы был выполнен сумасшедший объем? Практически всегда! Не смотря на то, что жизненный принцип команды DIIT Center - не ошибается тот, кто ничего не делает, наша компания предлагает вам ознакомится с технологией, которая облегчит боль исправлений и повысит тестируемость кода. Итак, сегодня главное звездой вечера будет библиотека Dagger 2.

Как часто вам приходится вносить изменения в работу, после того как этой самой работы был выполнен сумасшедший объем? Практически всегда! Не смотря на то, что жизненный принцип команды DIIT Center - не ошибается тот, кто ничего не делает, наша компания предлагает вам ознакомится с технологией, которая облегчит боль исправлений и повысит тестируемость кода. Итак, сегодня главное звездой вечера будет библиотека Dagger 2.

Основной принцип

Инъекция зависимостей уникальная технология для повышения тестируемости приложения и переиспользования классов, а Dagger 2 одна из самых популярных фреймворков dependency injection для Java и Android. Инъекция зависимостей основывается на концепции инверсии управления. В нем говорится, что класс должен получать свои зависимости извне. Простыми словами, ни один класс не должен создавать экземпляр другого класса, но должен получать экземпляры из класса конфигурации (извне).
Если один класс создает экземпляр другого класса через оператор new, он не может быть использован и протестирован независимо от этого класса и это называется жесткой зависимостью.
Итак, каковы преимущества предоставления зависимостей вне класса?
Важнейшим преимуществом является то, что он увеличивает вероятность повторного использования класса и позволяет тестировать их независимо от других классов.
Здесь имеется в виду не переиспользование кода в классе (такое мы можем добиться просто с помощью наследования или композиции), а переиспользование одного и того же экземпляра какого-либо класса в пределах какой-либо области видимости.

Преимущества Dagger 2

• Кодогенерация (no reflection)
• Возможность управлять областью видимостей (Scopes)
• Отсутствие проблем с обфускацией кода
• Поддержка Lazy-injections («ленивых» внедрений).
• Можно подменять реализацию через @Qualifier
• Multibindings
• Отдельный компонент для андроида сокращающий количество кода

Область применения

Dagger 2 удобно применять, когда необходимо прокинуть кучу зависимых классов для текущего и переноса инициализации эти компонентов в отдельные модули. Также с помощью даггера код становится более тестируемым и поддерживаемым. В нашей компании было решено применять Dagger на проектах средней и высокой сложности.

Руслан Алиев (Android-разработчик компании DIIT Center)