我们正在使用MVP模式和GWT,我想知道应该如何以及何时使用依赖注入。GWT MVP何时以及如何使用依赖注入
我们有一个应用程序控制器,演示者,视图和模型代码。从阅读GIN教程http://code.google.com/p/google-gin/wiki/GinTutorial#whb看来,你应该尽可能在最高级别使用它(所以在App Controller中)。
我应该用它来创建我的演示者,所以我可以做injector.getPresenter();
我们正在使用MVP模式和GWT,我想知道应该如何以及何时使用依赖注入。GWT MVP何时以及如何使用依赖注入
我们有一个应用程序控制器,演示者,视图和模型代码。从阅读GIN教程http://code.google.com/p/google-gin/wiki/GinTutorial#whb看来,你应该尽可能在最高级别使用它(所以在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测试)。他们也可能依赖于EventBus或类似的东西,这些东西很容易被模拟出来,专注于测试演示者的逻辑。
依赖注入是关于促进测试,就像分离责任一样。
谢谢杰森,你的答案可能是我见过的依赖注入的最佳简短描述。肯定填补了空白。 – K2J 2010-11-15 08:52:18