A子さんがBくんに依存している状態
class B {
love() {
return "愛してるよ(2番目になw)"
}
}
class A {
b = new B()
console.log(b.love() + "って言ってくれた!好き!")
}
A子さん「Bくんがいないとダメなの...」
DI(Dependency Injection)することでA子さんを「IBを継承した男なら誰でもいい」状態にする
interface IB {
love(): string
}
class HonestB implements IB {
love(){
return "愛してるよ(誰よりも)"
}
}
class A {
constructor(b: IB){
this.b = b
}
console.log(b.love() + "って言ってくれた!好き!")
}
const b = new HonestB()
const a = new A(b)
A子さん「HonestBくんに乗り換える!」
class Aの中でnew B()してたときはBに依存していたが
class AにIBの継承者をコンストラクタインジェクションできるようになった結果
new Aの引数に指定したIBの継承者を誰でも彼氏にできるようになった
A子さん「Bくんの代わりなんていくらでもいるのよ」
Bくんの代わりを用意できるため、Bくんが実装されていなくても代わりにdummyBくんを用意することでA子さんの実装を進められる: new A(dummyB)
同じ要領でBくんに依存しない単体テストもかける