ホームページ >バックエンド開発 >PHPチュートリアル >IOC とは (phpxiaoxin からリダイレクト)
IOCとは(phpxiaoxinより転載)
IoCとは何ですか? Inversion of Control、つまり制御の反転は、依存性注入と呼ぶ方が適切かもしれません。 IoC は IoC であり、GoF と同様に設計パターンです。
インターフェイス駆動設計 インターフェイス ドライバーには、さまざまな柔軟なサブクラス実装の提供、コードの安定性と堅牢性の向上など、多くの利点があります。ただし、インターフェイスは実装する必要があります。つまり、遅かれ早かれ次のステートメントを実行する必要があります。 a = new AInterfaceImp(); このようにして、次のような結合関係が生成されます:
Class A{
AInterface a;
A(){}
aMethod(){
a = new AInterfaceImp();
}
}
ClassA と AInterfaceImp は依存しています。AInterface の別の実装を使用する場合は、コードを変更する必要があります。もちろん、条件に基づいて AInterface の必要な特定の実装を生成するファクトリーを構築することもできます。つまり、
InterfaceImplFactory{
AInterface create(Objectcondition){
if(condition = condA){
return new AInterfaceImpA();
}elseif(condition = condB){
return new AInterfaceImpB();
}else{
return new AInterfaceImp();
}
}
}
表面的には、上記の問題をある程度軽減しますが、本質的には、このコードの結合は変わっていません。この結合は、IoC モデルを通じて完全に解決できます。結合をコードから移動し、必要に応じてコンテナを使用してこの依存関係を形成します。つまり、必要なインターフェイス実装をインターフェイスに挿入します。クラスでは、これが「依存性注入」という用語の起源である可能性があります。
IOC モード。IOC モードを実装する IOC コンテナがシステムに導入され、IOC コンテナはオブジェクトのライフサイクル、依存関係などを管理できるため、アプリケーションの構成と依存関係の仕様を実際のアプリケーション コードから分離できます。 。機能の 1 つは、特定のコードを再変更してコンパイルすることなく、テキスト添付ファイルを通じてアプリケーション コンポーネント間の相互関係を構成できることです。
現在よく知られている IOC コンテナには、Pico Container、Avalon、Spring、JBoss、HiveMind、EJB などが含まれます。
上記の IOC コンテナのうち、軽量のものには Pico Container、Avalon、Spring、HiveMind などが含まれ、超重量のものには EJB が含まれ、半分軽いコンテナと半分重いコンテナには JBoss、Jdon などが含まれます。
IoC モデルはファクトリ モデルを昇華したものと考えることができます。ただし、この大きなファクトリで生成されるオブジェクトはすべて XML ファイルで定義され、Java のファイルが使用される点が異なります。 「リフレクティブ」プログラミングは、XML で指定されたクラス名に基づいて、対応するオブジェクトを生成します。実装の観点から見ると、IoCは、柔軟性の向上を目的として、これまでファクトリメソッドにハードコーディングされていたオブジェクト生成コードをXMLファイルで定義するように変更する、つまりファクトリとオブジェクト生成を独立して分離することを目的としています。そしてメンテナンス性。
IoC における最も基本的な Java テクノロジは、「リフレクティブ」プログラミングです。リフレクションも聞きなれない用語です。平たく言えば、リフレクションとは、指定されたクラス名 (文字列) に基づいてオブジェクトを生成することです。このプログラミング方法では、生成するオブジェクトのタイプを決定する前にオブジェクトを生成できます。たとえば、Hibernate や String は最も基本的な技術的手段としてリフレクションを使用します。
以前は、リフレクション プログラミング手法は通常のオブジェクト生成手法に比べて 10 倍以上遅かったため、当時リフレクション テクノロジが一般的に使用されなかったのかもしれません。しかし、SUN による改善と最適化により、リフレクションを使用したオブジェクト生成の速度は通常のオブジェクト生成とほぼ同じになりました (ただし、まだ 2 倍以上の差があります)。
IoC の最大の利点は何ですか?オブジェクト生成は XML で定義されているため、実装サブクラス (通常、そのようなオブジェクトは何らかのインターフェイスで実装されます) を変更する必要がある場合は、XML を変更するだけで非常に簡単になります。そのため、ホットプラグも実現できます。オブジェクト (USB インターフェイスや SCIS ハードディスクに似ています)。
IoC の最大の欠点は何ですか? (1) オブジェクトを生成する手順が複雑になっています(実際の操作は非常に簡単です)。この方法に慣れていない人にとっては、少しぎこちなく直感的ではありません。 (2) オブジェクトの生成にはリフレクティブ プログラミングが使用されるため、効率がいくらか低下します。ただし、IoC の保守性と柔軟性の向上に比べれば、特定のオブジェクトの生成に特に高い効率が必要でない限り、この損失は無視できます。 (3) IDE の再構築操作がサポートされていない。Eclipse でクラスの名前を変更したい場合は、依然として XML ファイル内で手動で変更する必要がある。これは、すべての XML メソッドの欠点と思われる。