Я пытаюсь решить, использовать ли Transfuse или Dagger для инъекций зависимостей Android. Я никогда не использовал Transfuse и не имел базовых знаний о кинжале. Большое спасибо.Как Transfuse сравнивается с кинжалом?
ответ
Чтобы начать, я являюсь основным автором Transfuse, поэтому этот ответ может быть немного наклонен в этом направлении.
Как переливание, так и рукоятка кинжала Зависимость впрыска/инверсия управления для Android аналогичным образом. Оба используют обработку аннотации во время компиляции с помощью JSR269 для генерации кода, поддерживающего функциональность DI/IOC. Это позволяет им избежать дорогостоящего анализа на основе отражения, обычно связанного с контейнерами DI, найденными в не-Android Java. Не вдаваясь в специфику, Кинжал и Трансфузия действительно подходят к генерации кода по-разному, что отражается на особенностях библиотек. Кроме того, Transfuse и Dagger используют общие аннотации JSR330 (@Inject, Provider и т. Д.). Это означает, что они оба следуют схеме инъекций в стиле Guice.
Вот как создать граф объектов в Dagger:
public class DaggerActivity extends Activity {
@Inject Example example;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ObjectGraph.create().inject(this);
//do something else...
}
}
Эквивалентный код в переливать использует @Factory функциональность:
@Factory
public interface Injector {
Example get();
}
public class TransfuseActivity extends Activity {
Example example;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
example = Factories.get(Injector.class).get();
//do something else...
}
}
переливать предназначается для использования следующим образом, однако, используя компоненты POJO, события жизненного цикла и т. д .:
@Activity
public class TransfuseActivity{
@Inject Example example;
@OnCreate public void doSomethingElse(){
//do something else...
}
}
некоторые небольшие различия в двигателе в DI переливать и Dagger:
- переливать поддерживает (а также может) циклическая зависимость, Кинжал целенаправленно генерирует исключение в этом случае.
- Трансфузия удовлетворяет требованиям JSR330, кинжала в частности нет. Разработчики Dagger хотели ошибиться на стороне простоты, избегая инъекции метода, позволили им избежать нескольких запутанных случаев (link).
- Кинжал имеет двигатель, основанный на отражении, для случаев, когда код не генерировался. Transfuse не требует и требует, чтобы код работал (обработчик аннотации для запуска) для работы.
- Transfuse вводит в частные поля, конструкторы, методы (не обязательно рекомендуемые из-за отражения накладных расходов). Кинжал выдает исключение в этом случае.
- Кинжал использует модули очень прямым образом, отражая возможности Guice. Каждый раз, когда вы создаете граф объектов, вам предоставляется возможность настроить его с помощью класса модуля, то есть:
ObjectGraph.create(new DripCoffeeModule())
. Модуль конфигурации Transfuse немного отличается, поскольку он включен в приложение во время компиляции. Каждый модуль в Transfuse является глобальным для проекта (это может измениться в будущих версиях Transfuse, но пока это не было проблемой для использования Transfuse). - Синглтоны в кинжале - это графы для каждого объекта, в которых синглеты в Transfuse являются глобальными для приложения.
Большая разница между кинжалом и переливать, что Dagger сосредоточено на том, простую библиотеку Dependency Injection, в то время как фокус переливать является «make Android a better API using performance sensitive techniques»
переливать поддерживает эти возможности, а также DI:
- POJO Компоненты
- Manifest Управление
- Roboguice/инъекции стиль нож для масла
- Легкая система событий (@Observes, @OnCreate и т.д.)
- АОП
Я бы рекомендовал, если вы заинтересованы, дайте переливать попробовать. Лично мне хотелось бы услышать о вашем опыте, сравнив его с кинжалом. У нас есть mailing list, где вы можете поделиться с сообществом и довольно через documentation на сайте.
- 1. Android Transfuse
- 2. Android Studio с Transfuse
- 3. Transfuse vs AndroidAnnotations
- 4. Использование Kotlin с кинжалом
- 5. Android Espresso с кинжалом
- 6. Настройка Maps v2 с Android Transfuse
- 7. Presenter injection с кинжалом 2
- 8. Инъекция зависимостей с кинжалом 2
- 9. ORMLite с кинжалом в Android
- 10. динамическое связывание с кинжалом 2
- 11. Как Voldemort сравнивается с Cassandra?
- 12. Как RabbitMQ сравнивается с Mule
- 13. Как Elm сравнивается с ClojureScript?
- 14. Как Drupal сравнивается с SharePoint
- 15. Как FlockDB сравнивается с neo4j?
- 16. Как JavaFX сравнивается с WPF?
- 17. Как EAV сравнивается с RDF?
- 18. Как containerd сравнивается с runC
- 19. Как ввести анонимный внутренний класс с кинжалом?
- 20. Использование proguard с кинжалом 1.2.2
- 21. Просмотр инъекции с кинжалом 2
- 22. NullPointerException с Отто и кинжалом
- 23. Исключение примечания с кинжалом 2
- 24. Вложенные/рекурсивные инъекции с кинжалом
- 25. Как сравнивается массив Javascript?
- 26. Не удается построить график с кинжалом 2
- 27. Синглтон только в графике с плюсовым кинжалом
- 28. Вложение зависимостей в синглтон с кинжалом?
- 29. Как профилировщик EQATEC сравнивается с DotTrace?
- 30. Как node-imagemagick сравнивается с node-gm?
это замечательно. большое спасибо. –
@johncarl Это библиотека FANTASTIC! Но мне интересно, почему он так широко не используется, как AndroidAnnotations и Dagger, будучи гораздо более полным и надежным? Могу ли я полагаться на это в своем приложении и быть уверенным, что вы не откажетесь от него в какой-то момент в будущем? – nucleo
Ответил нуклео в группах Google: https://groups.google.com/forum/#!topic/transfuse/qn3DFUMxzas –