Web上の多くの記事では、制御の反転と依存関係の反転の原則という用語が混同され、同義語として使用されているように見えます(さらに混乱は、「DIコンテナー」と「IoCコンテナー」と呼ばれるツールによって強制されます)。 Wikipediaの記事 IoCがDIと同じではないことを説明しようとする素晴らしい仕事をします:
制御の反転(IoC)は、コンピュータープログラムのカスタム記述部分が、汎用の再利用可能なライブラリから制御のフローを受け取る設計を表します
したがって、DIPは、モジュールを具体的な実装ではなく抽象化に依存させることです。
IoCは、プログラムフローを別のモジュールに制御することを目的としています。このモジュールで実行できることの1つは、実行時に依存関係を解決することです。
この違いは公平に思えますが、依存関係の解決以外のIoC原則の他のアプリケーションについて誰も言及していません。ウィキペディアの定義は非常に広範であり、その構成といくつかの内部ロジックに基づいてカスタムコードを呼び出すことができるモジュールを使用すると、さらに多くのことができるようです。
だから、ここではまだ理解できていないいくつかの質問があります:
注:この質問は DIとIoCの違いは何ですか の重複ではありません。後者は依存性注入について質問するためです。 、依存関係の逆転ではありません。
Martin Fowlerのサイトには、 DIP、DI、IoCの違いに関する章 が掲載されたすばらしい記事があります。その要点(そのサイトからコピーされたもの)は
DIは、1つのオブジェクトが依存関係を取得する方法についてです。依存関係が外部から提供されている場合、システムはDIを使用しています。 IoCは、だれが通話を開始するかについてです。コードが呼び出しを開始する場合、それはIoCではありません。コンテナー/システム/ライブラリーが提供したコードにコールバックする場合、それはIoCです。
一方、DIPは、コードから、それが呼び出しているものに送信されるメッセージの抽象化レベルに関するものです。確かに、DIPでDIまたはIoCを使用することは、より表現力があり、強力でドメインに整合する傾向がありますが、全体的な問題では、異なる次元または力についてです。 DIは配線について、IoCは方向について、DIPは形状についてです。