我们正在使用MVP模式和GWT,我想知道如何以及何时应该使用依赖注入。
我们有App Controller,Presenters,Views和Model代码。通过阅读http://code.google.com/p/google-gin/wiki/GinTutorial#whb处的GIN教程,您似乎应该尽可能在最高级别使用它(因此在App Controller中)。
我应该用它来创建我的演示者,所以我可以做inject.getPresenter();
答案 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或类似的东西,可以很容易地模拟出来,专注于测试演示者的逻辑。
依赖注入是指促进测试,就像分离责任一样。