Published on

DIとはなんぞや

Authors
  • avatar
    Name
    Kikusan
    Twitter

DIとは

DIとは、オブジェクトの注入のこと。

依存関係を疎結合にしていって後から楽しようよ、って考え。

DIじゃないパターン

public class NonDI {
    private final String LOG_FILE_PATH = "sample.log";

    private Logger logger;

    NonDI() {
        this.logger = new Logger(LOG_FILE_PATH);
    }

    public void doSomething() throws IOException {
        logger.info("doSomething message");
    }
}

DIのパターン

public class ManualDI {
    private Logger logger;

    ManualDI(Logger logger) {
        this.logger = logger;
    }

    public void doSomething() throws IOException {
        logger.info("doSomething message");
    }
}

変わったのはコンストラクタの部分だけ。外部に生成を任せている。

これをコンストラクタ注入といって、他に

  • setter注入
  • インタフェース注入

がある。宣言場所が変わるだけで、やっていることは一緒。

注意点として、作らなければならない部品が増えると、コンストラクタの引数が増える。

その場合はDIコンテナとして生成の処理を任せるクラスを作ればいい。

その中でXMLなどの設定外部ファイルを利用すれば、さらに簡単に改修ができるようになるし、 テスト用の設定に組み替えればプログラムの構造を変えずにテストできる。

一言でいえば、DIは依存性を減らして処理を外部に任せるってことなんだな。