エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

DI(依存性注入)の仕組みが嬉しい理由【349日目】

DIってなんぞや

class A {
  private $db_handler;

  public __construct(Handler $db_handler) {
    $this->db_handler = $db_handler
  }
}

このクラスは、Handlerクラスがないと動かない。依存している。
その依存しているインスタンスを外部から渡してやっている。

このクラスを使うなら、new A(new MySQLHandler())こんな感じ。
これで嬉しいのは、new A(new PostgreSQLHandler())とかで使うこともできる。

良くない例

class A {
  private $db_handler = new MySQLHandler();
}

class Aは、依存しているものの中身を意識しないでいい

このとき、使うべきHandlerが、MySQLなのか、PostgreSQLなのか、
そこを意識しないでも、プログラムを書けるのがいいところ。

このおかげで、プログラムを書いてる人はどのデータベースに対しても書けるし、
テストコードも書きやすい。