2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

依存性逆転をDependency Injectionでやる

Last updated at Posted at 2021-01-25

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くんに依存しない単体テストもかける

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?