【问题标题】:GWT MVP when & how to use Dependency InjectionGWT MVP 何时以及如何使用依赖注入
【发布时间】:2010-11-13 01:51:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: gwt dependency-injection gwt-gin


    【解决方案1】:

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

    至于 何时 使用依赖注入,我想说的是,无论您想在哪里测试系统的组件,而无需加载真正的重量级依赖项。

    考虑尝试测试此方法是否返回 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
      }
    }
    

    如果一个组件没有任何依赖项,这是不太可能的,那么你不需要为它使用依赖注入。

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

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

    【讨论】:

    • 感谢 Jason,您的回答可能是我见过的对依赖注入的最佳简短描述。当然填补了空白。
    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2018-09-03
    • 2013-01-29
    • 2013-09-17
    • 2021-07-07
    相关资源
    最近更新 更多