Знакомство с Google Guice - PullRequest
10 голосов
/ 16 июля 2010

Я только начинаю играть с Google Guice в качестве фреймворка для внедрения зависимостей и пытаюсь переоборудовать его в небольшой и средний проект, который я недавно написал.Я понимаю основы работы Guice, но немного расплывчат в некоторых деталях подхода.Например:

1) Модули используются для определения ваших привязок, которые затем подаются в инжекторы.Вы склонны помещать все в один модуль или разбиваете на множество меньших модулей?

2) У вас есть один инжектор на верхнем уровне, который внедряет все дерево объектов или несколько точек с точкамио том, какие только инъекции те зависимости, которые вам действительно нужно внедрить?Я имею в виду мою собственную кодовую базу, которая, конечно, имеет много зависимостей, но только небольшую кучку, которую мне нужно контролировать во время тестирования.

3) Я немного застрял на лучшем способеполучить мои системные тесты / тесты интеграции с использованием модулей только для тестовой среды вместо производственных версий.Этот вопрос, вероятно, зависит от конкретной реализации, но мне любопытно, какие методы люди используют.Для справки, мое приложение представляет собой веб-приложение на основе сервлетов.

Есть ли другие указатели?

Ответы [ 2 ]

13 голосов
/ 16 июля 2010

1) Обычно вы разбиваете вещи на несколько модулей. Одна из целей Guice - помочь сделать код модульным, и для этого есть модули. Как вы разберетесь с этим, зависит от вас (и, очевидно, вам не обязательно). Одним из преимуществ более мелких модулей является то, что вы можете определять модули в конкретном пакете и делать классы, реализующие интерфейсы, закрытыми. Поскольку модуль находится в пакете, он может связывать эти конкретные классы и их можно использовать для настройки Injector (в другом пакете). Кроме того, вы делаете свой код более гибким, когда вы можете изменить то, как что-то делается, просто заменив один модуль на другой вместо того, чтобы менять код в одном монолитном модуле.

2) Да, один инжектор на верхнем уровне, впрыскивающий все дерево объектов, - это то, как все должно быть сделано. Это возвращает нас к вопросу о модулях ... используйте их для разбиения зависимостей на группы и используйте один инжектор.

3) Используйте другой класс точки входа, который настраивает инжектор. Для автономного приложения у меня был бы другой класс main ... для веб-приложения, я полагаю, вы могли бы сделать отдельный GuiceServletContextListener для тестирования. Затем вы можете заменить целые модули на модули для тестирования или использовать Modules.override для переопределения привязки в конкретном модуле и т. Д.

0 голосов
/ 16 июля 2010

Взгляните на книгу Внедрение зависимостей - она ​​охватывает как Guice, так и Spring, поэтому очень легко переходит от одного фреймворка к другому. Определенно хорошо, если вы уже понимаете принципы, лежащие в основе IoC.

...