依存関係の注入について話します
オブジェクト指向プログラミングでは、私たちがよく扱う問題は分離です。プログラムの結合が低いほど、プログラムの読みやすさと保守性が示されます。制御の反転(制御またはIOCの反転)は、オブジェクト指向プログラミングの一般的に使用される設計原理です。この原則を使用して、結合を減らすことができます。その中で、依存関係注射は、コントロール反転の最も一般的に使用される実装です。
依存関係とは何ですか
依存関係は、プログラムで一般的な現象です。たとえば、Gasenergyクラスのインスタンスエネルギーはクラスカーで使用されます。通常の練習は、車のクラスにガスエネルギークラスのインスタンスを明示的に作成し、それをエネルギーに割り当てることです。次のコードに示されているように
インターフェイスエネルギー{}クラスガスエネルギーはエネルギーを実装します{}クラスカー{エネルギーエネルギー= new GasEnergy();}問題があります
クラスカーは不必要な責任を想定しており、必然的に深刻な結合があるエネルギーオブジェクトの作成に責任があります。現実的な例を示すために、車が使用するエネルギーが自動車ではなく、自動車メーカーに依存するエネルギーを使用することは、車の責任です。
スケーラビリティ。エネルギーを電力に変更したいと仮定すると、明らかにオープンクロージャーの原則に準拠していない車のクラスを変更する必要があります。
単体テストを助長しません。
依存関係インジェクション
依存噴射はそのような動作です。クラスカーでは、GasEnergyオブジェクトは積極的に作成されていませんが、依存関係は外部からGasenergyオブジェクトに渡すことで設定されます。依存性噴射には3つの一般的な方法があります。
コンストラクターインジェクション
コンストラクターのパラメーターとして必要な依存関係を渡して、依存関係噴射を完了します。
クラスカー{エネルギーメナルギー;公共車(エネルギーエネルギー){メネルギー=エネルギー; }}セッターメソッドインジェクション
セッターメソッドを追加すると、パラメーターは注入する必要がある依存関係であり、依存関係の注入を完了することができます。
クラスカー{エネルギーメナルギー; public void setEnergy(エネルギーエネルギー){メネルギー=エネルギー; }}インターフェイスインジェクション
インターフェイスインジェクションは自明であり、依存関係注入のための一連のインターフェイスを作成し、依存関係がパラメーターとして渡され、特定の実装への依存関係注入が統一されたインターフェイスを呼び出すことによって完了します。
Interface EnergyconsumerInterface {public void setEnergy(Energy Energy);}クラスカーはEnergyConsumerInterface {Energy Menergy; public void setEnergy(エネルギーエネルギー){メネルギー=エネルギー; }}インターフェイスインジェクションはセッターメソッドインジェクションに似ています。違いは、インターフェイスインジェクションが統一された方法を使用してインジェクションを完了することですが、セッターメソッドインジェクションのメソッド名は比較的カジュアルです。
フレームワークのトレードオフ
依存噴射には多くのフレームワークがあり、最も有名なものはガイースです。もちろん、Springは依存関係の注入もサポートします。 Guiceは、ランタイム読み取り注釈を使用し、依存関係を生成し、反射を通じてそれらを注入します。このフォームは、Androidモバイルデバイスにはあまり適していません。結局のところ、これらの操作は実行時に処理され、高性能要件があります。
Daggerは、Android開発に適した依存噴射ライブラリです。また、クラスの注釈の形を使用します。違いは、コンパイル時に補助クラスを生成し、生成された補助クラスが実行時に依存関係を完了するために使用されるまで待機することです。
使用するかどうか
実際、フレームワークを使用するかどうかは問題です。フレームワークを使用する場合、チームの全員が指示に従ってコードを作成するために依存関係の注入を解決する必要があります。これらのフレームワークは開始が容易ではなく、学習係数は比較的複雑で習得が困難です。これも考慮する必要があります。
私の個人的な意見では、これらのフレームワークの使用を推奨したり、反対したりしないということですが、フレームワークを期待していることもあるので、日常生活の中でこれらの問題に注意を払う方が良いと感じています。人為的な回避も自分自身の基本的な要件ではありませんか?
依存関係検索
依存関係検索は、依存関係注入の受動的受容性とは異なり、制御反転原理の特定の実装であり、依存関係検索はアクティブな要求です。必要に応じて、オブジェクトはフレームワークによって提供されるメソッドを呼び出すことによって取得されます。取得するときは、取得しているオブジェクトの状態を決定するために、関連する構成ファイルパス、キー、その他の情報が必要です。
上記は、依存関係の注入に関する情報の詳細な紹介です。今後も関連情報を追加し続けます。このサイトへのご支援ありがとうございます!