2

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

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

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

4

1 回答 1

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
  }
}

如果一个组件没有任何依赖项(这不太可能),那么您不需要对其使用依赖项注入。

Presenter 通常依赖于视图,可以轻松地模拟出来以进行更快的测试(使用 JUnit 进行测试,而不是 GWT 测试)。它们也可能依赖于 EventBus 或类似的东西,可以很容易地模拟出来以专注于测试演示者的逻辑。

依赖注入既是为了促进测试,也是为了分离责任。

于 2010-11-12T17:51:22.387 回答