2

MVPパターンとGWTを使用していますが、依存性注入をいつどのように使用する必要があるのか​​疑問に思っています。

アプリコントローラー、プレゼンター、ビュー、モデルコードがあります。http://code.google.com/p/google-gin/wiki/GinTutorial#whbでGINチュートリアルを読むと、可能な限り最高レベルで使用する必要があるように思われます(App Controllerで)。

プレゼンターを作成するためにそれを使用する必要があるので、injector.getPresenter();を実行できます。

4

1 に答える 1

5

依存性注入を使用するためにアプリに必要な場所はありません。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
  }
}

コンポーネントに依存性がない場合(可能性は低いですが)、依存性注入を使用する必要はありません。

プレゼンターは通常、ビューに依存します。ビューは、より高速なテスト(GWTテストではなくJUnitを使用したテスト)のために簡単にモックアウトできます。また、EventBusなどに依存している場合もあります。これらは、プレゼンターのロジックのテストに集中するために簡単にモックアウトできます。

依存性注入は、責任を分離することと同じくらい、テストを容易にすることです。

于 2010-11-12T17:51:22.387 に答える