Кто-нибудь может дать четкое объяснение, почему Google Guice полезен? - PullRequest
35 голосов
/ 23 сентября 2009

Я читал о Google Guice и разбираюсь в общих проблемах с другими подходами к внедрению зависимостей, однако я еще не видел пример того, как кто-то использует Guice «на практике», где его значение становится понятным.

Мне интересно, кто-нибудь знает о таких примерах?

Ответы [ 3 ]

43 голосов
/ 23 сентября 2009

Использование Google Guice для упрощения модульного тестирования - это только преимущество высокого уровня. Некоторые люди могут даже не использовать модульное тестирование в своем проекте. Люди используют Spring / Dependency Injection больше, чем только для модульного тестирования.

Преимущество низкого уровня использования Google Guice - это вопрос сплоченности вашего приложения, ваши классы в проекте могут быть слабо связаны друг с другом. Я могу предоставить класс для другого класса без их зависимости друг от друга.

Рассмотрим этот пример:

public class A{

}

public class B{
  A a = new A();
}

Класс B будет тесно связан с классом A, или, другими словами, он зависит от существования класса A.

Но с Guice я могу вместо этого сделать его слабо связанным, как это:

public class B{
    private A a;

    @Inject
    public B(A a){
        this.a = a;
    }
}

Класс B теперь слабо связан с A, и Guice отвечает за предоставление экземпляра A вместо того, чтобы B создавал его экземпляр. При этом вы можете расширить его, чтобы обеспечить интерфейс от А до Б, и реализация может быть объектом Mock, если вы хотите выполнить модульное тестирование своих приложений.

Сказав, что мы пока обсуждаем только преимущества внедрения зависимости. Помимо внедрения зависимостей, преимущества использования Google Guice:

  1. В Guice очень чистая реализация конструктора Injection. Как видно из примера, вы просто добавляете конструктор аннотаций @Inject.
  2. У Guice также есть сеттерная инъекция с той же аннотацией.
  3. Сказав это, инъекция на основе аннотаций является очень чистым подходом по сравнению с инъекцией на основе XML, как и некоторые другие реализации DI.
  4. Все внедрение и конфигурирование зависимостей использует Java, поэтому вы гарантированно получаете безопасность типов в своем приложении по умолчанию.
  5. Guice имеет очень легкую реализацию Аспектно-ориентированного программирования (или, может быть, вы можете назвать ее оболочкой для реализации AOPAlliance AOP). И хорошо, что он не генерирует заглушки или что-то еще.

Вот обзор. Но когда вы углубляетесь в Guice, в этом есть еще много хорошего. простой пример из реальной жизни - если вы используете GWT с реализацией MVP , компоненты / виджеты в вашем приложении GWT очень слабо связаны и не тесно связаны друг с другом.

17 голосов
/ 23 сентября 2009

Возможно, вам следует вернуться в прошлое и посмотреть на проблемы, которые Гис хотел решить. Чтобы понять мотивы, стоящие за Guice, новость Боб Ли: Я не получаю Spring на TheServerSide.COM (и его комментарии) является идеальной отправной точкой. Затем продолжайте анонс Google Guice, платформы внедрения зависимостей Java (и комментариев) и Tech Talk: Боб Ли о Google Guice (и комментариях).

Лично я разделял озабоченность по поводу злого XML: ад конфигурации XML, XML и возможные ошибки времени выполнения, подверженные ошибкам и идентификаторы строк, препятствующие рефакторингу и т. Д. И т. Д. На самом деле я считаю, что скептическое мнение о Spring и совпадении было хорошим для всех (включая весну). Таким образом, я был рад видеть нового игрока в среде DI-фреймворка, особенно современный фреймворк, использующий функции Java 5 (дженерики и аннотации ради безопасности типов).

А поскольку Google запускает Guice в критически важных приложениях (почти каждое приложение на основе Java также является приложением на базе Guice: AdWords , Google Docs, Gmail и даже YouTube, как сообщает "Crazy" Боб Ли в «1013 * Guice² ), я не могу поверить, что Guice совершенно неправ и не дает никакой ценности. К сожалению, я не думаю, что Google предоставит много кода этих приложений в качестве примеров ... Но вы можете найти интересные вещи в списке приложений, которые используют Guice и / или список третьего Вечеринка Guice Addons . Или посмотрите книги, упомянутые в Guice² . Или спросите Боба :)

4 голосов
/ 23 сентября 2009

Я думаю, что преимущество заключается в кодировании интерфейсов, тестировании и прокси.

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

Это верно для Guice, Spring, PicoContainer и всех платформ DI.

Достаточно кратко?

...