
Dagger 2は、コンパイル時に実行されるJavaおよびAndroid用の完全に静的な依存性注入フレームワークです。 Dagger 2は、 Googleがサポートする以前に開発されたSquare Daggerフレームワークを改造したものです 。
この記事の対象者
あなたがAndroidを直接研究し、同時にJavaの知識を習得する初心者のAndroid開発者であるなら、この記事はあなたのためです。 Dagger 2を学ぼうとし、インターネットで見つけたものが少し複雑に思えた-心配しないで、私もこれを経験しました(私たちはすべて少し特別です、誰もが何かを説明するのに独自のアプローチが必要です)この記事は間違いなくあなたのためです。 依存性注入とDaggerに既に精通している場合は、新しいことを学んだり、自分でいくつかのことを明確にしたりできます。
一連の記事
- 初心者のAndroid開発者向けの短剣2。 はじめに(あなたはここにいます) 。
- 初心者のAndroid開発者向けの短剣2。 依存性注入 パート1
- 初心者のAndroid開発者向けの短剣2。 依存性注入 パート2
- 初心者のAndroid開発者向けの短剣2。 ダガー2。パート1 。
- 初心者のAndroid開発者向けの短剣2。 ダガー2。パート2 。
- 初心者のAndroid開発者向けの短剣2。 ダガー2.アドバンス。
パート1 - 初心者のAndroid開発者向けの短剣2。 ダガー2.アドバンス。
パート2
必要条件
Javaプログラミング言語 、 OOPおよびAndroid開発の原則に既に精通していることを前提としています。
中毒とは何ですか?
注:この概念を説明するために、テレビシリーズGame of Thronesとの類推を使用します。 このシリーズに慣れていない場合は、クラス名をより便利なものに置き換えることができます。 そして、あなたは間違いなくこのシリーズを見始めるべきです。
依存関係と関係を理解することは、オブジェクト指向プログラミングの概念をより明確に理解するための最初のステップです。 だから中毒とは何ですか? たとえば、内部で
Dragons
と呼ばれる別のクラスまたはインターフェイスを使用する
Targaryens
クラスがあります。 したがって、
Targaryens
クラスは
Dragons
クラスまたはインターフェイスに依存します。
GIF
つまり、
Targaryens
クラスは
Dragons
なしでは機能しません。 これは、
Targaryens
クラスが使用される場所はどこでも
Dragons
クラスが存在することを意味します。つまり、
Dragons
を再利用せずに
Targaryens
を再利用することはできません。 この場合、
Targaryens
は依存クラスであり、
Dragons
は依存クラスです。 扶養家族は彼の依存に依存しています。
互いに使用する2つのクラスは'coupled'と呼ばれます。 クラス間の関係は、強い( 'tight' )または弱い( 'loose' )のいずれかです。 依存関係は常に指示されます。つまり、
Targaryens
クラスは
Dragons
に依存しますが、
Dragons
クラスは
Targaryens
クラスに依存しない場合があります。
class Targaryens { public Targaryens() { // , Targaryens, Dragons Dragons dragons = new Dragons(); dragons.callForWar(); } }
中毒が悪いのはなぜですか?
クラス内の多数の依存関係は、次の理由により悪い依存関係の問題につながります。
- コードの再利用の機会を減らしました。
- テストプロセスは複雑になっています。
- プロジェクトの成長に伴い、コードの保守性が悪化します。
#再利用(再利用可能性)
クラスとメソッドが疎結合、無関係、または他の多くの要素と独立している場合、コードを再利用する可能性が高まります。 コードの再利用は、オブジェクト指向プログラミングの基本的な考え方の1つです。
#テスト
テストのために、特定のオブジェクトを置換( モック )できます。 ただし、クラスまたはメソッドに多くの依存関係がある場合、テストは困難になります。 Javaクラス(たとえば、
Targaryens
)が
new
演算子を介して別のクラス(
Dragons
)のインスタンスを作成する場合、このクラス(
Targaryens
)は、
new
(
Dragons
)演算子を介して作成されたクラスに関係なくテストできません。
#サポート性
コードを正しくテストできない場合、その部分は不可能または再利用が困難であり、プロジェクトは成長し続け、プロジェクトの維持は非常に困難になります。 サポートは他の多くの要因に依存しますが、チームの新しい開発者はシステムを理解し、同僚をより快適にしますが、プロジェクトは引き続きサポートされます。
依存関係の種類
依存関係には多くの種類がありますが、主なものは区別できます。
- クラスへの依存。
- インターフェイス依存。
- メソッドまたはフィールドへの依存。
- 直接および間接依存。
#クラスに依存
前にクラスの依存関係の例を見てきました。
Targaryens
クラスのコンストラクタは、
Dragons
クラスに依存するか、
callForWar()
メソッドを呼び出す必要があります。
#インターフェイスに依存
executePlan
メソッドは、
WarStrategy
インターフェースを依存関係として受け入れます。
WarStrategy
は、すべての家(Targaryens、Starks、Lannistersなど)で実装できます。
public Result executePlan(WarStrategy strategy) { //WarStrategy }
#メソッドまたはフィールドへの依存
次のメソッドは
HouseClass
オブジェクトを受け取り、それが
getKing()
メソッドは依存関係であり、メソッドシグネチャで識別できません。
public String extractName(HouseClass house) { return house.getKing(); // }
#直接および間接の依存関係
別の例を見てみましょう。
Targaryens
クラスは、玉座を征服する際に
Starks
クラスに依存しています。 しかし、
Starks
は北のその他の王国、例えば
Starks
依存しています。 したがって、
Targaryens
Starks
直接依存し、間接的に
Mormont
依存していることが
Mormont
ます。
まとめ
Javaクラスが
new
演算子を介して別のクラスのインスタンスを作成する場合、このクラスは
new
演算子を介して作成されるクラスとは無関係に使用またはテストできません。 これは中毒と呼ばれます。
依存関係は、コードの再利用の可能性を減らし、テストプロセスを複雑にし、プロジェクトの維持をより困難にするという点で悪いです。
依存関係には、クラス、インターフェイス、メソッド、フィールド、直接、間接など、さまざまなタイプがあります。
次は?
次の記事では、 ハードな依存関係の問題を解決する方法について説明します。もちろん、依存関係の挿入は正解です。 実際の例を考えて、強いつながりを見つけて分析してください。