Заменяет ли рукоять Dagger2?

Заглянув в DI-фреймворк Dagger2 от Google, чтобы решить, использовать ли DI Framewor в приложении среднего размера, я также заметил Hilt

Итак, согласно его обзорному описанию:

Hilt работает с помощью кода, генерирующего для вас код установки Dagger. Это убирает большую часть шаблонов использования Dagger и действительно просто оставляет аспекты определения того, как создавать объекты и куда их вставлять. Hilt сгенерирует компоненты Dagger и код для автоматического внедрения ваших классов Android (например, действий и фрагментов) для вас.

Hilt генерирует набор стандартных компонентов Android Dagger на основе вашего транзитивного пути к классам. Для этого необходимо пометить ваши модули Dagger аннотациями Hilt, чтобы сообщить Hilt, в какой компонент они должны входить. Получение объектов в классах вашей платформы Android выполняется с помощью другой аннотации Hilt, которая генерирует код внедрения Dagger в базовый класс, который вы расширяете. Для пользователей Gradle расширение этого класса выполняется с помощью скрытого преобразования байт-кода.

1. Он не заменяет Dagger2 и не является его преемником?

2. Рукоять является чем-то дополнительным к Dagger2, что упрощает использование Dagger2?

3. Есть ли какие-то недостатки, кроме альфа-версии?


person Pavel Pipovic    schedule 14.07.2020    source источник


Ответы (2)


Заменяет ли рукоять Dagger2?

Нет. Эфес все еще использует кинжал под капюшоном. Вы можете думать об этом как о самоуверенном расширении Dagger для Android. Я говорю самоуверенный, потому что у него есть некоторые ограничения того, что вы могли бы сделать с простым Dagger по сравнению с использованием Hilt, который имеет жесткую структуру компонентов, но в то же время это устраняет большую часть шаблонного использования Dagger .

Ваши вопросы также могут послужить ответом ...

  • Он не заменяет Dagger2 и не является его преемником.
  • Рукоять является чем-то дополнительным к Dagger2, что упрощает использование Dagger2.

Есть ли какие-то недостатки, кроме того, что все еще есть в Альфе?

Ну, это в альфа-версии, и все может измениться. Я определенно подожду, прежде чем использовать его в производстве.

Преимущество перед обычным Dagger или dagger.android заключается в том, что его будет проще настроить из-за строгой структуры взаимосвязи компонентов. Это также позволяет Hilt удалить некоторые шаблоны и сделать настройку менее подробной. Это должно упростить интеграцию.
Но в то же время это также его недостаток. Вы можете строить всевозможные графы зависимостей с помощью простого Dagger, тогда как Hilt ограничивает вас их предопределенной структурой. Поэтому он может быть не таким мощным, когда дело касается больших и сложных проектов.

person David Medenjak    schedule 15.07.2020

Рукоять основана на идее единого центрального стержня. Ядро - ApplicationComponent, и каждый дочерний субкомпонент вносит свой вклад в сгенерированный код. Имея некоторый опыт разработки больших проектов с большим количеством модулей Gradle, соединенных вместе с помощью Dagger, вот некоторые ключевые моменты:

  • сборка будет очень медленной, если вы поместите все в один компонент AppComponent. Это делают Dagger-Android и Hilt. Оба просто расширяют AppComponent кучей подкомпонентов, которые предоставляют свои собственные привязки и сущности. Чем больше привязок, тем крупнее подкомпоненты - ›больше AppComponent и время сборки.

  • С другой стороны, plain Dagger легко настраивается. Вы можете использовать зависимости компонентов вместо подкомпонентов и избежать раздутия вашего AppComponent привязками какой-либо функции. Вы можете полностью разделить свои функции. А значит - ›сократить время сборки. На самом деле это имеет значение.

На мой взгляд, Hilt - хороший вариант для новичков, которые могут быстро начать делать MVP.

person Maxim Alov    schedule 21.10.2020