DIコンテナってなんだろう(2/2)

前回、オブジェクト指向についての説明を行いました。

では、オブジェクト指向についてデメリットはなんなのかについてまず記述していきたいとおもいます。

オブジェクト指向のデメリットとは

オブジェクト指向はいろいろな事象をオブジェクトとして捉え、それの組み合わせで一つのものを作るというすごく便利なものです。しかし、組み合わせが強すぎるのではという問題がありますよ。

 

要はオブジェクト間の依存です!

 

たとえば、以下のような図のシステムがあった時に、「Class A」は全てのクラスから継承されています。もし、ここでClass AのメソッドAを編集したときにそれを継承している全てのクラスの内容を書き換えないといけなくなってしまいます。これは、Class Aと他のクラスとの依存関係が濃密すぎるのが問題です。

仮にこのシステムを一人で作っているのであればまだしも、複数人がそれぞれのクラスを分担して作成しているとなると被害は甚大です。

f:id:pgpg-sou:20131209135506p:plain

 

この依存性を少しでもなくしてあげるのがDI(Dependency Injection)という考え方です。

DIは直訳すると「依存性の注入」みたいな意味があります。

では、具体的にどういうものなのでしょうか。

DIコンテナとは

簡単にいいますと、オブジェクト間の依存関係というのを外部ファイルに書き出します。その外部ファイルを読み込んでそれをクラスに注入するのがDIコンテナです。

 絵に書くとこんな感じです。

f:id:pgpg-sou:20140108155801p:plain

 

DIコンテナのメリット

では、 DIコンテナのメリットとはなんでしょうか。メリットを以下にあげてみました。

  • オブジェクト間の疎密合
  • 疎密によりオブジェクトの保守性・拡張性の向上
  • 単体テストがしやすくなる

DIコンテナのデメリット

では、DIコンテナのデメリットを以下にあげてみました。

  • 設定ファイルが肥大化していく
  • 知るためのコスト
  • あまり一般的につかわれていない(?)

まとめ

DIコンテナについて説明しました。
DIコンテナとはオブジェクト間の密な依存関係をなくすためのものです。

2回に分けてDIコンテナの概要について説明してきました。

次回はソースコードを乗っけて説明していこうと思います。