1. ホーム
  2. dependency-injection

[解決済み] 制御の逆転」、「依存関係の逆転」、「デカップリング」の違いについて

2023-05-07 04:55:40

質問

に関する理論を読んでいます。 依存関係の逆転 デカップリング との違いがわかりません。

依存関係の反転 は、より高いレベルのコンポーネントがより低いレベルのコンポーネントに依存しないように、機能コンポーネントを切り離すことについて述べています。

デカップリング は、同じこととそれを達成する方法について述べています。しかし、その後、私たちは IoC コンテナ があり、さらに物事を混乱させます。なぜ彼らはむしろ 依存性反転コンテナ あるいはもっといいのは 依存性注入コンテナ というのは、独立したコンポーネントの実行時カップリングに役立つからです。

では、私たちは 制御の逆転 . と基本的に同じものです。 依存性の逆転 とは違うのですか?なぜ同じことを表す用語が3つもあるのでしょうか?それとも私の目が悪いのでしょうか?

  1. この 3 つの違いは何ですか?
  2. IoCはIoCコンテナで何をしなければならないのでしょうか?

どのように解決するのですか?

デカップリング は、多くの分野で適用できる非常に一般的な原理です。 依存関係の逆転 はデカップリングの特定の形態で、システムをライブラリに分離し、インターフェイスを使用することによって、システムの高位レベルを低位レベルから切り離すものです。これにより、大きな手直しをすることなく、システムの低レベルの部分を置き換えることができます。

たとえば、システムの上位の部分が下位のクラスの具体的なインスタンスを作成する代わりに、IoC コンテナを使用して、オブジェクトの作成方法をデカップリングすることができます。

制御の逆転 は、フレームワークライブラリによって使用される設計原則で、フレームワークがアプリケーションからある種の制御を取り戻すことを可能にします。たとえば、ウィンドウ フレームワークは、特定のユーザー インターフェイス イベントが発生したときに、アプリケーション コードにコールバックすることができます。Martin Fowler はこの用語を使って ハリウッド・プリンシプル というように 私たちを呼ぶな、私たちがあなたを呼ぶ . デカップリングは、制御の逆転の重要な部分です。

しかし、何が IoCコンテナ は制御の反転と関係があるのでしょうか? Martin Fowlerの言葉を引用すると :

<ブロッククオート

Inversion of Control はあまりにも一般的な用語であるため、人々はそれを混乱させると思っています。その結果、さまざまな IoC 支持者と多くの議論を行い、私たちは Dependency Injection という名前に落ち着きました。

(Martin Fowler が 依存性注入 ではなく 依存関係の逆転 .)

IoCコンテナは依存性注入を実装するのに役立ち、おそらくより良い用語は依存性注入コンテナとなるでしょう。しかし、IoC コンテナという名称は定着しているようです。依存性注入は依存性の逆転において重要なコンポーネントですが、制御の逆転はより広く一般的な原理であるため、依存性注入にIoCコンテナを使用すると混乱する可能性があります。

ネーミングがあまり一貫していないとのご指摘ですが、これらの用語は重複していても独自に考案され使用されているので、大きな驚きではありませんね。