GWT MVP依存関係噴射の使用方法と方法
-
09-10-2019 - |
質問
MVPパターンとGWTを使用していますが、依存噴射をどのように使用するのか疑問に思っています。
アプリコントローラー、プレゼンター、ビュー、モデルコードがあります。ジンのチュートリアルを読むことから http://code.google.com/p/google-gin/wiki/gintutorial#whb 可能な限り最高レベルで使用する必要があるように思われます(アプリコントローラーで)。
それを使用してプレゼンターを作成する必要があるので、injector.getPresenter()を実行できます。
解決
アプリには、依存関係噴射を使用するために必要な場所はありません。 1つのビューまたはモジュールに使用することも、どこでも使用することもできます。いずれにせよ、インジェクターを可能な限り高いレベルで利用できるようにしない理由はありません(つまり、アプリコントローラー)。
はどうかと言うと いつ 依存関係のインジェクションを使用するには、実際の重量の依存関係をロードすることなく、システムのコンポーネントをテストしたい場所であればどこでも言うでしょう。
この方法が3を返すことをテストしようとすることを検討してください:
public int returnsThree() {
new WeatherChecker().checkTheWeather();
return 3;
}
ネットワークアクセス、タイムアウト/障害などを意味する、その大きな天気チェックの依存関係を読み込んで実行することができないでしょう。
これははるかに優れています:
public int returnsThree(WeatherChecker dep) {
dep.checkTheWeather();
return 3;
}
そうすれば、テストは次のように、この依存関係のためにock笑を渡すことができます。
public class MockWeatherChecker extends WeatherChecker {
@Override
public void checkTheWeather() {
// do nothing
}
}
コンポーネントに依存関係がない場合、それがありそうもない場合、依存関係インジェクションを使用する必要はありません。
プレゼンターは通常、ビューに依存しており、より高速なテストのために簡単にモックアウトできます(GWTテストではなくJunitを使用してテスト)。また、イベントバス、または同様のものに依存する場合があります。これは、プレゼンターのロジックのテストに集中するために簡単にモックアウトできます。
依存関係は、責任を分離することと同じくらい、テストを促進することです。