しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

DIコンテナとは何かを調べてみた

DIコンテナとは何か調べてみました。
サンプルはSwiftで書かれています。

DIとは

DIとはDependency injectionの略で、デザインパターンの一種です。
日本語では言うと依存性の注入などと呼ばれる事が多いです。
このデザインパターンは複数の関連するオブジェクトの結合を疎にする為のものです。

例えば以下のようにOwnerはDogクラスに紐付いているとします。
もしこのコードで、OwnerにDogのサブクラスを渡したいと言われたりDogのプロパティーを変更したいと言われると都度Ownerを変更する必要があります。
そうなるとOwnerが多くの場所で使われている場合にテストが大変ですし、柔軟性にも欠けます。

class Owner {
    func exec() {
        Dog().howl()
    }
}

class Dog {
    func howl() {
        print("wan!")
    }
}

Owner().exec()

それをDIを使って変更してみます。
DIを使うと以下のようになります。
Dogをコンストラクタで外部から渡す事で柔軟なクラスになりました。

class Owner {
    let dog: Dog
    
    init(dog: Dog) {
        self.dog = dog
    }
    
    func exec() {
        dog.howl()
    }
}

class Dog {
    func howl() {
        print("wan!")
    }
}

Owner(dog: Dog()).exec()

DIコンテナとは

DIコンテナとはDIを実現できるフレームワークの事を指します。
JavaSpring Frameworkなどが有名です。

参考URL

仕事に役立つプログラミング・キーワード - DIコンテナ【Dependency Injection Container】:ITpro
依存性の注入 - Wikipedia