
これは、 初心者のAndroid開発者向けのDagger 2シリーズの3番目の記事です。 前のものを読んでいない場合、 ここにいます。
一連の記事
- 初心者のAndroid開発者向けの短剣2。 はじめに
- 初心者のAndroid開発者向けの短剣2。 依存性注入 パート1
- 初心者のAndroid開発者向けの短剣2。 依存性注入 パート2(ここにいます) 。
- 初心者のAndroid開発者向けの短剣2。 ダガー2。パート1 。
- 初心者のAndroid開発者向けの短剣2。 ダガー2。パート2 。
- 初心者のAndroid開発者向けの短剣2。 ダガー2.アドバンス。
パート1 - 初心者のAndroid開発者向けの短剣2。 ダガー2.アドバンス。
パート2
一連の記事の前半
前回の記事では、依存関係と依存関係の注入について詳しく説明しました。 また、例-ろくでなしの戦いを検討しました。ここでは、 強い依存関係を持つ
War
クラスを作成しました。
ドラゴングラスの使用
先ほど検討した例-ろくでなしの戦いを思い出しましょう。
War
クラスには、
Boltons
と
Starks
2つの強力なつながりがあります。
public class War { private Starks starks; private Boltons boltons; public War(){ starks = new Starks(); boltons = new Boltons(); starks.prepareForWar(); starks.reportForWar(); boltons.prepareForWar(); boltons.reportForWar(); } }
ドラゴングラスを利用して、ホワイトウォーカーを破壊する時が来ました。 はい、依存関係の注入を使用して、強い結び付きを排除します。
依存性注入のアイデアを思い出してください。 クラスは他のクラスを作成しないでください。 代わりに、外部の依存関係を取得する必要があります。
War
クラスのコンストラクターを介して、
Boltons
と
Starks
依存関係を外部に取得しましょう。
public class War { private Starks starks; private Boltons boltons; // (DI) - public War(Starks starks, Boltons boltons){ this.starks = starks; this.boltons = boltons; } public void prepare(){ starks.prepareForWar(); boltons.prepareForWar(); } public void report(){ starks.reportForWar(); boltons.reportForWar(); } }
上記の例は、コンストラクターによる依存性注入の変形です。 あなたはおそらくあなたのプロジェクトでこれを常に行っていると思うでしょう。 確かに、多くは依存関係注入の概念を意識せずに使用しています。
War
クラスは、特定のタスクを実行する方法だけでなく、タスクを完了するために必要なクラスを探す場所も知る必要があります。 仕事に必要なものすべてを外部のクラスに提供すると、以前に考慮されていた問題を取り除きます。 クラスは、タスクを実行するために必要な他のクラスのインスタンスと簡単に連携でき、それらから独立してテストされるだけです。 依存関係注入を使用するアプリケーションでは、オブジェクトは依存関係を探したり、オブジェクト内で作成したりすることはありません。 すべての依存関係は、彼に提供されるか、すぐに使用できるように埋め込まれています。
もちろん、ある時点で、誰かが依存関係クラスをインスタンス化し、それを必要とするオブジェクトに提供する必要があります。 通常、この作業はアプリケーションへのエントリポイントで行われます。 たとえば、通常のJavaアプリケーションでは、以下に示すように、そのようなコードは
main()
メソッド内にあります。 Androidでは、これは通常
onCreate()
内の
onCreate()
メソッドで行われます。
public class BattleOfBastards { public static void main(String[] args){ Starks starks = new Starks(); Boltons boltons = new Boltons(); War war = new War(starks,boltons); war.prepare(); war.report(); } }
BattleOfBastards
クラス
BattleOfBastards
は、
Boltons
と
Starks
依存関係を作成し、コンストラクターから
War
クラスに
Boltons
を
Boltons
。 依存
War
クラスは、
Boltons
と
Starks
依存関係に依存します。
自分に感謝し、祝う時間です。 はい、ホワイトウォーカーを破壊しました(強い絆)! 私たちが何を作ろうとしているかの概念を理解してください。
まとめ
この記事では、クラスがそれ自体の中で依存関係を作成してはならないことに気付きました。 代わりに、彼はそれらを外で受け取るべきです。
また、実際に依存関係を簡単に実装する計画を見ました。 ろくでなしの戦いの例を取り上げ、依存関係の注入によって強い結びつきを排除しようとしました。
メディア

次は?
次の記事では、Dagger 2ライブラリーについて説明しますが、より複雑で複雑なプロジェクトに対処する必要がある場合に、アノテーションと、Dagger 2が依存関係を実装しやすくする方法について説明します。 次の記事は1週間で公開されます。