GWT MVP何时和何时;如何使用依赖注入

GWT MVP何时和何时;如何使用依赖注入,gwt,dependency-injection,gwt-gin,Gwt,Dependency Injection,Gwt Gin,我们正在使用MVP模式和GWT,我想知道应该如何以及何时使用依赖注入 我们有一个应用程序控制器、演示者、视图和模型代码。从阅读GIN教程来看,您似乎应该尽可能在最高级别使用它(在App Controller中也是如此) 我是否应该使用它来创建演示者,以便执行injector.getPresenter() 应用程序中没有使用依赖项注入所需的位置。您可以将其用于一个视图或模块,也可以在任何地方使用。无论哪种方式,都没有理由不在最高级别(即您的应用程序控制器)上提供注入器 至于何时使用依赖项注入,我想

我们正在使用MVP模式和GWT,我想知道应该如何以及何时使用依赖注入

我们有一个应用程序控制器、演示者、视图和模型代码。从阅读GIN教程来看,您似乎应该尽可能在最高级别使用它(在App Controller中也是如此)


我是否应该使用它来创建演示者,以便执行injector.getPresenter()

应用程序中没有使用依赖项注入所需的位置。您可以将其用于一个视图或模块,也可以在任何地方使用。无论哪种方式,都没有理由不在最高级别(即您的应用程序控制器)上提供注入器

至于何时使用依赖项注入,我想说的是,无论您想在哪里测试系统的组件,而不必加载真正的重型依赖项

考虑尝试测试此方法是否返回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测试)。它们也可能依赖于事件总线或类似的东西,可以很容易地模拟出来,以集中测试演示者的逻辑


依赖注入既能促进测试,又能分离责任。

谢谢Jason,你的回答可能是我见过的对依赖注入最好的简短描述。当然填补了空白。