Статьи

Внедрение зависимостей на Android с RoboGuice

RoboGuice , также называемый Google Guice для Android, — это простая в использовании инфраструктура внедрения зависимостей, которая может сделать разработку Android более интуитивно понятной и удобной. Используя эту платформу, вы можете значительно сократить объем кода, который вы пишете для выполнения общих задач, таких как инициализация различных ресурсов, доступ к системным службам Android и обработка событий.

В этом уроке я покажу вам, как максимально использовать RoboGuice 3 в ваших проектах Android.

Традиционно, если объект зависит от чего-либо, он несет ответственность за удовлетворение этой зависимости. Проще говоря, если экземпляр класса A зависит от экземпляра класса B, то обычно ожидается, что разработчик вызовет конструктор класса B внутри кода класса A. Это, очевидно, приводит к более тесной связи между этими двумя классами.

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

Таким образом, используя внедрение зависимостей, вы можете в значительной степени избавиться от конструкторов и фабричных методов в бизнес-логике вашего проекта.

Google Guice — это инфраструктура, которая упрощает создание, настройку и использование инжектора зависимостей в ваших проектах Java. RoboGuice основан на Google Guice и поставляется с предварительно настроенным инжектором зависимостей для Android. Проще говоря, RoboGuice из коробки знает, как инициализировать различные объекты Android, получать ссылки на различные ресурсы приложения и многое другое.

RoboGuice использует аннотации Java, которые представляют собой не что иное, как метаданные, встроенные в код Java, для определения того, что и куда нужно вводить Более ранние версии RoboGuice использовались для обработки аннотаций с использованием Java Reflection API во время выполнения и часто критиковались за медлительность. RoboGuice 3, однако, поставляется с RoboBlender, процессором аннотаций во время компиляции, который значительно улучшает производительность RoboGuice.

Прежде чем использовать RoboGuice, вы должны добавить его в качестве зависимости compile в файл build.gradle модуля приложения . Поскольку он доступен в стандартном репозитории Android Studio, jcenter , для этого требуется всего одна строка кода.

groovy compile 'org.roboguice:roboguice:3.0.1'

Для повышения производительности RoboGuice рекомендуется также добавить RoboBlender , процессор аннотаций, в качестве provided зависимости.

groovy provided 'org.roboguice:roboblender:3.0.1'

Чтобы использовать аннотации RoboGuice в ваших действиях на Android, их классы должны расширять RoboActivity вместо Activity . Точно так же, если вы хотите использовать аннотации внутри службы Android, ее класс должен расширять RoboService вместо Service .

Обычно вы должны использовать метод setContentView и передавать ему ресурс макета, чтобы установить макет Activity . RoboGuice предлагает альтернативный способ сделать то же самое, аннотацию @ContentView .

Например, вот как вы должны применить макет, определенный в файле XML с именем activity_main.xml, к RoboActivity именем MainActivity :

« `java @ContentView (R.layout.activity_main) открытый класс MainActivity расширяет RoboActivity {

} « `

Если вы считаете, что использование метода findViewById и приведение типов к типу объекта View он возвращает, — большая работа, вы можете вместо этого @InjectView аннотацию @InjectView @InjectView .

Например, рассмотрим следующий макет:

« `XML