#android #guice #roboguice
#Android #guice #roboguice
Вопрос:
Я обсуждаю использование guice в проекте Android, который довольно сложный и имеет много бизнес-логики. Guice кажется подходящим, но всякий раз, когда я начинаю углубляться в него, он начинает выглядеть сложнее, чем должен быть.
Одна вещь, которую я не понимаю: если Guice настолько хорош и лучший способ написания кода Java, почему так мало кода Android, который использует Guice… и почему Google не использовал guice для Android?
Комментарии:
1. Android был частью приобретения Android-стартапа Энди Рубина, и к тому времени, когда Google был вовлечен, база кода была хорошо налажена, поэтому неудивительно, что он, возможно, не использовал платформу внедрения зависимостей Google.
Ответ №1:
Guice полностью имеет смысл использовать и фактически используется в целом ряде приложений. Расширение RoboGuice добавляет некоторые тонкости для Android, что делает его очень продуктивным в использовании.
На самом деле я не могу представить написание приложения для Android без него. Слишком болезненно.
Проверьте ссылки на приложения, использующие Roboguice на веб-сайте (например, Документы Google, OpenTable …). Также известно, что другие приложения, такие как Square app, напрямую используют Guice.
Это полностью имеет смысл .. иди и сделай это!
Вместе с Robolectric это также облегчит ваши усилия по тестированию.
PS: Я являюсь коммиттером в RoboGuice, поэтому я неравнодушен 😉
PPS — июнь 2013: последние разработки привели к появлению других фреймворков на основе аннотаций / зависимостей, которые выполняют большую часть работы во время сборки и, следовательно, избегают снижения производительности отражения во время выполнения (которое медленно на Android) и, следовательно, более подходят для критически важной работы — ознакомьтесь с Dagger и AndroidAnnotations, есливас это интересует.
Комментарии:
1. 1 для «PPS» и ссылки на примечания Dagger и AndroidAnnotations
Ответ №2:
На самом деле Google не рекомендует использовать Guice или RoboGuice в приложениях Android из-за накладных расходов на память.
Источник:
http://developer.android.com/training/articles/memory.html#DependencyInjection
5.11.2014 Править:
Для Android существует специальная библиотека быстрого внедрения зависимостей. Я вижу, что все больше и больше людей используют его:
http://square.github.io/dagger/
13.04.2015 Редактировать: Google выпустил собственную версию dagger, которая не использует отражение во время выполнения: http://google.github.io/dagger /
Ответ №3:
Вы знаете, что есть RoboGuice? Это Guice для Android.
Комментарии:
1. К сожалению, RoboGuice больше не поддерживается (по состоянию на август 2016 года)
Ответ №4:
Проблема с демонстрацией сильных сторон инфраструктуры внедрения зависимостей заключается в том, что ее невозможно достичь с помощью простого приложения Hello World. Эти фреймворки показывают свою ценность только в больших системах с большой сложностью. Кроме того, у них какая-то крутая кривая обучения.
Поэтому вполне нормально, что вы не можете найти достаточно руководств — проектов с открытым исходным кодом, которые используют Guice. Это чаще всего будет использоваться в корпоративных приложениях, которые не публикуются.
Почему Google не использует Guice, Guice подходит не везде. Это добавляет накладные расходы на производительность, и нет смысла использовать его там, где это не нужно.