2010-11-12 47 views

回答

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或类似的东西,这些东西很容易被模拟出来,专注于测试演示者的逻辑。

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

+1

谢谢杰森,你的答案可能是我见过的依赖注入的最佳简短描述。肯定填补了空白。 – K2J 2010-11-15 08:52:18