Connect with us

Разработка

Metro — новый фреймворк внедрения зависимостей для Android

Он не пытается изобрести велосипед, а пытается заставить существующие колеса работать лучше вместе. Короче говоря, Metro стоит на плечах гигантов.

Опубликовано

/

     
     

Metro — это фреймворк для внедрения зависимостей во время компиляции, во многом вдохновленный Dagger, Anvil и Kotlin-Inject. Он стремится объединить их лучшие функции в одно целостное решение, добавив несколько новых и реализуя их в виде плагина компилятора.

В течение некоторого времени возникало ощущение, что сообщество Kotlin хотело создать библиотеку, объединяющую эти различные инструменты и функции. Для некоторых из этих задач существуют различные инструменты, но пока не существует единого решения, которое связывало бы их все вместе, устраняло бы некоторые из их ограничений и включало бы новые функции, предлагаемые плагинами компиляторов. Metro пытается стать таким ответом. Он не пытается изобрести велосипед, а пытается заставить существующие колеса работать лучше вместе. Короче говоря, Metro стоит на плечах гигантов.

Установка

Metro 0.1.1 доступен сегодня. Установка проста!

Документация: https://zacsweers.github.io/metro/
Runtime API: https://zacsweers.github.io/metro/api/0.x/
Репозиторий: https://github.com/zacsweers/metro

Фичи

Если вы когда-либо работали с Dagger или kotlin-inject, то в Metro вы почувствуете себя как дома.

Графы — это интерфейсы или абстрактные классы, аннотированные @DependencyGraph.

Предоставляйте зависимости с помощью внедрения конструктора в стиле JSR-330 или провайдеров непосредственно в ваших графах.

Выполните вспомогательную инъекцию с помощью @Assisted и @AssistedFactory.

Добавляйте и объединяйте биндинги как в Anvil.

Необязательные зависимости. Если зависимость не существует в внедряемом графе, используется значение параметра по умолчанию.

Внедрение функций верхнего уровня.

Подробные, но понятные сообщения об ошибках и диагностика.

Metro - новый фреймворк внедрения зависимостей для Android

И многое другое!

Основные моменты

  • Проверка графа зависимостей во время компиляции
  • Генерация кода FIR/IR во время компиляции
  • Генерация кода и рантайм в стиле Dagger
  • API в стиле Kotlin-Inject
  • Агрегация в стиле Anvil
  • Мультиплатформенность
  • Интеграция с IDE
  • Расширенный интероп
  • Частные провайдеры и инъекции частных членов
  • Необязательные зависимости
  • Внедрение функции верхнего уровня
  • Подробные, но понятные сообщения об ошибках и диагностика

Перейдите в раздел «Возможности» на сайте проекта, чтобы получить полный обзор, а в разделе «Использование» получите полную документацию по всем доступным API.

Производительность сборки

Будучи плагином компилятора, Metro работает значительно быстрее. При сравнительном тестировании моего приложения CatchUp производительность сборки значительно возросла.

Средние улучшения

  • ABI – на 47% быстрее
  • ABI без инкрементальной компиляции – на 28% быстрее
  • No-ABI – на 56% быстрее
  • Без ABI и без IC – на 25.5% быстрее

Metro - новый фреймворк внедрения зависимостей для Android

Будущая работа

Metro все еще находится в стадии активной разработки. Это всего лишь первый релиз, в нем будут ошибки, и есть несколько важных функций, которые я хочу реализовать в дальнейшем. Биндинги, допускающие значение NULL, @ContributesGraphExtension и сообщения о неиспользуемых биндингах — вот лишь некоторые из них. Более подробную информацию можно найти в системе отслеживания ошибок и обсуждениях в репозитории.

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: