Подтвердить что ты не робот

Знакомство с Google Guice

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

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

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

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

Любые другие указатели?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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