Google Keep に置きっぱなしになっていたメモ。

どの DI の手法を使うべきか

構造に関するパターンは、Constructor で DI する。

生成に関するパターンは、動的に使われるので、Setter で DI する。ただし、コンストラクタでデフォルトの Factory を Set し、NotNullable にする。

振る舞いに関するパターンは、実装パターンに近いと思う。どっちかっていうと、Contract であって、つまりインターフェースの実装パターンだよね、という認識。

単体テストをする対象は、生成に関するパターンと振る舞いに関するパターンを使っている箇所

単体テストは、コンパイル時に検出できないエラーを検出するための手段。 なので、構造に関するパターンの部分については、テストしない。生成に関するパターンと振る舞いに関するパターンについて、単体テストすべき。

ただし、Java みたいに、Nullable しかない欠陥言語については、integration test(結合テスト)のタイミングで、構造に関するパターンのテストを入れたほうが良いかもしれない。 Kotlin みたいに言語レベルで Null Guard 構文があれば、この対応の必要性は下がる。