В вашем приложении нет необходимого места для использования внедрения зависимостей. Вы можете использовать его для одного представления или модуля, или использовать его везде. В любом случае, нет причин не делать инжектор доступным на максимально возможном уровне (т. Е. В вашем контроллере приложений).
Что касается , когда использует внедрение зависимостей, я бы сказал, где бы вы ни хотели протестировать компонент вашей системы без необходимости загружать реальные тяжелые зависимости.
Попробуйте проверить, что этот метод возвращает 3:
public int returnsThree() {
new WeatherChecker().checkTheWeather();
return 3;
}
Вы не сможете без загрузки и запуска этой большой зависимости от проверки погоды, то есть доступа к сети, обработки тайм-аута / сбоя и т. Д.
Это намного лучше:
public int returnsThree(WeatherChecker dep) {
dep.checkTheWeather();
return 3;
}
Таким образом, ваш тест может просто пройти фиктивно для этой зависимости, например:
public class MockWeatherChecker extends WeatherChecker {
@Override
public void checkTheWeather() {
// do nothing
}
}
Если у компонента нет каких-либо зависимостей, что маловероятно, вам не нужно использовать для него внедрение зависимостей.
Представители обычно зависят от представления, которое можно легко смоделировать для более быстрых тестов (тестирование с использованием JUnit, а не тестов GWT). Они также могут зависеть от EventBus или чего-то подобного, что может быть легко смоделировано, чтобы сосредоточиться на тестировании логики докладчика.
Внедрение зависимостей - это как облегчение тестирования, так и разделение ответственности.