Intereting Posts
Невозможно отключить производственное приложение в консоли разработчика Google Play в пользу бета-версии Ограничения внешнего ключа в Android с помощью SQLite? On Удалить каскад Меню Android Options в фрагменте Как передать параметры моему приложению из локальных файлов или из Google Play? Почему мои файлы активов не обновляются? Открытие файла pdf с сервера с использованием намерений Android Eclipse «Недопустимое описание проекта» при создании нового проекта из существующего источника Закругленные углы Как начать разработку приложений для Android? Android Lollipop – Потяните, чтобы обновить Как проверить, открыта ли камера любым приложением Вибрация onclick Попытка поймать щелчок на элементе ListView android: android: descendantFocusability = "blocksDescendants" не работает AdMob с помощью Служб Google Play – тестовые объявления – заполнение от сервера объявлений не заполняется PendingIntent запланирован с использованием AlarmManager.RTC-тип все еще вызывается в спящем режиме

Java-зависимость: Кинжал 1 против Кинжала 2, что лучше?

Каковы преимущества кинжала 2 над кинжалом 1 ?

До сих пор я нашел (просто) 2:

  • Кинжал 2 позволяет использовать обфускацию кода с помощью proguard
  • Dagger 2 работает быстрее (что не очень полезно при использовании приложения для Android, но это важно, если вы используете его для какого-то сервера)

В то же время я обнаружил один большой недостаток: у вас не может быть переопределения модулей ( @Module(overrides = true) ) в Dagger 2, что в значительной степени раздражает, по крайней мере, для меня – это было очень полезно для модульного теста.

Существуют ли другие преимущества / недостатки?

Solutions Collecting From Web of "Java-зависимость: Кинжал 1 против Кинжала 2, что лучше?"

Некоторые преимущества и недостатки, взятые из https://blog.gouline.net/2015/05/04/dagger-2-even-sharper-less-square/ и http://google.github.io/dagger/dagger-1 -migration.html :

Преимущества кинжала 2:

  • Больше нет размышлений – все делается как конкретные вызовы (ProGuard работает без конфигурации вообще)
  • Больше состава графика времени выполнения – улучшает производительность, в том числе случаи для каждого запроса
  • Прослеживаемый – лучше сгенерированный код и отсутствие отражения помогают сделать код читаемым и легко следовать
  • Поддерживает инъекцию метода в дополнение к инъекции поля и конструктора, которые были единственными двумя типами, поддерживаемыми кинжалом 1
  • Модули требуют меньше конфигурации, чем Кинжал 1
  • Позволяет пользователям использовать любую хорошо сформированную аннотацию области. Кинжал 1 поддерживал только одну область: @Singleton .

И недостатки:

  • Метод inject() теперь имеет сильную ассоциацию типов с целью инъекции. Это хорошо для отладки, но это усложняет обычную практику инъекции из базовых классов (например, базовые действия, фрагменты и т. Д.).
  • Для реализации компонента требуется перестроение проекта, и любые ошибки компиляции, связанные с инъекциями, приводят к исчезновению класса (т. Е. Не генерированию).
  • Не поддерживает overrides . Модули, которые переопределяют для простых подделок при тестировании, могут создавать подкласс модуля для подражания этому поведению. Модули, которые используют переопределения и полагаются на инъекцию зависимостей, должны быть разложены так, чтобы вместо этого переопределенные модули представлялись как выбор между двумя модулями.

EDIT 2016/11/16: Это не техническое преимущество, но теперь Кинжал 1 устарел (по состоянию на 15 сентября 2016 года) и больше не будет активно развиваться. Они рекомендуют мигрировать в кинжал 2.

Я бы не рекомендовал взглянуть на зубочистку .

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