A の機能を利用すること。 Class B の中で Class A のインスタンスを作成している時に、「Class B は Class A に依存している」と言う。 開発者がClassB を開発する時には、ClassA を使うことを知らなければならない。 Dependency とは Class A Class B Class B depends on Class A.
で利用したい ClassA のインスタンスを、第三者から渡すこと。 ClassB は与えられたものを利用すれば良いので、ClassB の中では ClassA のインスタンス化をする必要がない。 コンストラクタを利用するのが一般的。 Dependency Injection とは Class A Class B Class B depends on Class A. 第三者 Class B Pass a Class A instance via constructor. ✍setter や method を利用する方法もある。 Setter は public になってしまうし、method では private だが可変になってし まうので constructor でやるのが良い。 Setter vs. Constructor Injection
SOLID 原則の 1 つ。クラス B をクラス A の実装ではなくインターフェース (IF) に依存させる。 こうすることで、依存関係を逆転することができる。 Dependency Inversion とは Class A Class B Class B depends Class A. Class B 🔍 「依存性逆転の原則」と「依存性の注入」を完全に理解した Class A Interface A Class B Class A1 Interface A Class A2 ✍矢印の向きが変わっていないように見えるかもしれません。それぞれを module と捉えると、module B の中で module A の interface にのみ依存 すればよくなります。 これは実質的に module 同士の依存関係が逆転したと言えます。 依存性逆転の原則(Dependency Inversion Principle), the D in SOLID
Class 内のドメインロジックに集中することができる ・疎結合になるので、変更に強くなる といった効果が得られる。 「Injection するが Inversion しない」という実装は可能なので注意が必要。 Injection と Inversion を同時に行う 第三者 Class B Class A1 Interface A Class A2 Class B
することで、storybook や test などで、同じ type を持つオブジェクトを自由に挿入できる。 jest などモックでも可能だが、再利用性や複雑なケースも対応で きることを考えると Injection に軍配があがる。 Injection と Inversion を合わせることで依存関係をシンプルにしつつ、意識する必要がなくなる。