Spring Frameworkの勉強をしていたら、DIが出てきた。何となく何をしたいのかは分かるが正しく理解したいのでDIという概念について、勉強がてら記事にする。また毎度のごとく海外のWikipediaを参照した。
DIとは
DIはプログラムのデザインパターンの一種。依存関係にあるオブジェクトを受け取るというテクニックのこと。通常、オブジェクトを受け取るものをクライアント、渡される(注入される)オブジェクトをサービスという。そのサービスをクライアントに渡す動作を記述したコードをインジェクタという。
DIでは「クライアントが、どのサービスを使用するか」についての決定権をクライアントの代わりにインジェクタが保有する。
DIであるために必要なこと
上記より、このデザインパターンではサービスがクライアントの一部を構成している(依存していると言い換えてもいいと思う)ため、インジェクタの存在が必要。
何がいいのか
このデザインパターンを実装すると、”構造”と”オブジェクトの使用”を分離させることが出来る。(後に説明) これがコードの可読性と再利用性を高める。
DIについて、もう少し詳しく
クライアントは、インジェクタやサービスについて知る必要がない。(むしろ知るべきではない。なぜならクライアントとサービスを分離させたいから。)
そのためクライアントはサービスのインターフェース(利用方法)についてのみ知っていればよい。
以上より最初の章の図を書き直すと、
このようになる。
これをするとサービスオブジェクトを特定する必要がない(インターフェースを実装さえしていればよい) そのためクライアントが構造を、インジェクタがオブジェクトの使用を司る。これによりコードの構造とオブジェクトの使用を分離出来る。これが先ほどの利点に繋がる。
※補足
サービスオブジェクトはインジェクタが生成する。
終わり
DIについて解説した。比較的抽象的な話をしたので分かりづらかったかもしれない。ただ、この構造を把握出来れば色々役立つと思う。海外で扱われている情報と日本語で出回ってる情報は偶に異なっていたりするので、英語自身ニキは是非海外のページから情報収集することも選択肢の一つに入れて欲しい。
コメント