88

依存性逆転デカップリングについての理論を読んでいますが、この2つの違いがわかりません。

依存性逆転は、高レベルのコンポーネントが低レベルのコンポーネントに依存しないように、機能コンポーネントを分離することについて話します。

デカップリングは、同じこととそれを達成する方法について話します。しかし、それから私たちは物事をさらに混乱させるIoCコンテナを持っています。独立したコンポーネントの実行時の結合を提供するため、依存性逆転のコンテナーまたはさらに優れた依存性注入コンテナーと呼ばれないのはなぜですか?

次に、制御の反転があります。基本的に依存性逆転の原則と同じですよね?同じことを表す3つの用語があるのはなぜですか?それとも私は盲目ですか?

  1. 3つの違いは何ですか?
  2. IoCはIoCコンテナで何をする必要がありますか?
4

4 に答える 4

88

デカップリングは、多くの分野に適用できる非常に一般的な原理です。依存性逆転の原則 は、システムの上位レベルをライブラリに分離し、インターフェイスを使用して下位レベルから分離する特定の形式の分離です。これにより、大幅な手直しなしでシステムの下位レベルの部品を交換できます。

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

制御の反転は、フレームワークがアプリケーションからある程度の制御を取り戻すことを可能にするフレームワークライブラリによって使用される設計原則です。つまり、ウィンドウフレームワークは、特定のユーザーインターフェイスイベントが発生したときにアプリケーションコードをコールバックする場合があります。マーティン・ファウラーは、「私たちに電話しないでください。私たちはあなたに電話します」のように、ハリウッドの原則という用語を使用しています。デカップリングは、制御の反転の重要な部分です。

しかし、IoCコンテナは制御の反転と何の関係があるのでしょうか。マーティンファウラーを引用するには

制御の反転はあまりにも一般的な用語であるため、人々はそれを混乱させることに気づきます。さまざまなIoC支持者との多くの議論の結果、依存性注入という名前に決めました。

(Martin Fowlerは、依存性逆転ではなく、依存性注入について話していることに注意してください。)

IoCコンテナは、依存性注入の実装に役立ちます。おそらく、より適切な用語は、依存性注入コンテナです。ただし、IoCコンテナの名前は固定されているようです。依存性注入は依存性逆転の重要な要素ですが、制御の反転はより広く一般的な原則であるため、依存性注入にIoCコンテナーを使用すると混乱する可能性があります。

命名はあまり一貫していないとあなたは指摘しますが、これらの用語は重複していても独立して発明され使用されているので、それは大きな驚きではありません。

于 2010-10-12T07:59:32.473 に答える
50

依存性注入は、制御の反転を使用してデカップリングを実現します。

于 2010-10-12T07:53:22.867 に答える
29

martinfowler.comのWildの記事にあるDIPからの次の説明は、理解しやすいと思います(ここでは、DI =依存性注入、DIP =依存性逆転の原則、IoC =制御の反転)。

DIは、1つのオブジェクトが依存関係を取得する方法に関するものです。依存関係が外部に提供されている場合、システムはDIを使用しています。IoCは、誰が通話を開始するかについてです。コードが呼び出しを開始する場合、それはIoCではありません。コンテナー/システム/ライブラリが、指定したコードにコールバックする場合、それはIoCです。

一方、DIPは、コードから呼び出しているものに送信されるメッセージの抽象化のレベルに関するものです。(...)DIは配線に関するものであり、IoCは方向に関するものであり、DIPは[コードが依存するオブジェクトの]形状に関するものです。

于 2016-08-25T09:10:42.720 に答える
2

依存性逆転の原則:具体化ではなく、抽象化に依存します。

制御の反転:メインと抽象化、およびメインがシステムの接着剤である方法。

DIPとIoC

これらはこれについて話しているいくつかの良い投稿です:

https://coderstower.com/2019/03/26/dependency-inversion-why-you-shouldnt-avoid-it/

https://coderstower.com/2019/04/02/main-and-abstraction-the-decoupled-peers/

https://coderstower.com/2019/04/09/inversion-of-control-putting-all-together/

于 2019-04-13T14:52:30.100 に答える