DIとは


Intro

DIとは

  • Dependency Injection(依存性注入)
    • 「依存性」とか言ってるが、実際はDependencyとはオブジェクトのこと。
  • デザインパターン

どのようなデザインパターン?

  • 外からオブジェクトを注入する。
  • 関数やクラス内で、インスタンスをnew()で生成する場合、関数やクラスはインスタンス(の元のクラス)の開発が完了しないと、正常に動作しない。
  • インスタンスの開発を待たずに、関数やクラスを使いたい場合に、インスタンスを関数やクラスの外で作り、関数やクラスに何らかの方法で注入する。
  • 何らかの方法とは

    • コンストラクタの引数としてインスタンスを入れる(コンストラクタインジェクション)
    • setterの引数としてインスタンスを入れる(セッターインジェクション)
    • 関数の引数としてインスタンスを入れる(インターフェースインジェクション)
      • 関数の引数としてインスタンスが使えるように、関数を修正する必要がある
  • メリット

    • 関数やクラスの単体テストに、インスタンスのnewの成否が影響しなくなる。
      • テストにはインスタンスのモックを使う
  • しかし、例えばコンストラクタインジェクションすると、コンストラクタの引数が追加されたりしたら、インジェクション先全てで修正する必要があり、大変。

    • そこでインスタンスの生成を別の場所で一括で行う。その別の場所のことをDIコンテナと呼ぶ。