web-dev-qa-db-ja.com

依存性注入と依存性反転の違い

2つのデザインパターン、つまりDependency InjectionとDependency Inversionが存在します。違いを説明しようとする記事がネットにあります。しかし、それをもっと簡単な言葉で説明する必要がまだあります。そこに来る人はいますか?

PHPで理解する必要があります。

18
Istiaque Ahmed

この記事を参照してください here

著者は、これら2つを単純な言葉で区別しています。 Dependency Injection ==“ Gimme it”およびDependency Inversion ==“誰かが何らかの形でこれを処理してくれます。”。依存関係の反転の原則では、高レベルモジュールが抽象化の所有者です。したがって、詳細(抽象化の実装)は抽象化に依存するため、高レベルのモジュールに依存します。依存関係の反転!..依存関係の注入は異なります。抽象化は、高レベルモジュールによって保持されない場合があります。したがって、高レベルのオブジェクトに与えられた抽象化は、高レベルのモジュールのニーズに限定されないかもしれません。

依存関係の反転:

より高いレベルのモジュールXと、Xによって定義される抽象化Yがあります。ZはYを実装し、Xに与えられます。したがって、ZはXに依存します(Xによって定義される抽象化Yを介して)。

依存性注入:

機能AとBを必要とする上位レベルのモジュールXがあります。Yは機能A、B、Cを含む抽象です。ZはYを実装します。現在、XはYに依存しています。

2
AJA

Dependency Injectionは、Inversion of Controlを達成するための1つの方法です(これは、Dependency Inversionと呼んでいると思います)。したがって、DIはIoCの専門分野であるため、実際には競合していません。 IoCを実現する他の一般的な方法には、工場またはService Locatorパターンの使用が含まれます。

1
Kyle Burns