作成: 更新:
Dependency Injectionとは
この記事は最終更新日から1年以上が経過しています。この記事は最終更新日から14か月以上が経過しています。
このエントリーは約1分で読めます。
はるか昔に触ったSpring bootの話題の時に
ふいに出たDIの話がまさかの抜け落ちていたため危機感を感じ改めて自分用に整理
Dependency Injection is 何?
- オブジェクトに対して、オブジェクトを注入すること(=依存性の注入)
参考:DIの実装例
メリデメ
DI前.java | DI後.java |
---|---|
FileLoggerが実装出来るまで、AServiceが実装出来ない | FileLoggerがなくてもAServiceの実装を進められる |
FileLoggerからDatabaseLoggerに変える場合、AServiceを修正する必要がある | AServiceの呼び出し元を変えるだけでOK |
AServiceのdoSomethingのテストの度に、ファイルにログが吐かれる | MockLoggerを渡すことで、ファイルにログを吐かなくできる |
Dependency Injection is いつ?
実装クラスと別の責務の処理が発生しているとき
※特に読み込み・書き込みが発生する箇所
- 例:ロジッククラスでDIするといい場面例
- SNSの一覧取得・投稿
- 設定ファイルの取得・書き込み
- DBへの接続
- ログの書き込み・取得
- 3rdAPIへの接続
DI進めるうえでの弊害
DIしたいインスタンスが多くなる(=コンストラクタの引数が増える)
引数が増える→複数個所で被DI対象が使われていれば修正箇所が増大する