GWT MVP&如何使用依赖注入

时间:2010-11-12 16:36:35

标签: gwt dependency-injection gin

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

我们有App Controller,Presenters,Views和Model代码。通过阅读http://code.google.com/p/google-gin/wiki/GinTutorial#whb处的GIN教程,您似乎应该尽可能在最高级别使用它(因此在App Controller中)。

我应该用它来创建我的演示者,所以我可以做inject.getPresenter();

1 个答案:

答案 0 :(得分:5)

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

至于使用依赖注入时,我会说你想要测试系统组件的任何地方,而不必加载真正的重量级依赖项。

考虑尝试测试此方法返回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或类似的东西,可以很容易地模拟出来,专注于测试演示者的逻辑。

依赖注入是指促进测试,就像分离责任一样。