背景
laravelでポートフォリオ作成中。
講座等でたくさん出てくる「依存性注入」が本当になんとなくわかってきたから自分の言葉でまとめておく。
依存性注入とは
DI(Dependency Injection)ともいう。
必要な部品(依存?)を「外からもらう」こと。
「依存」を他のところから「注入」してもらう。
→これがまだあんまりイメージできないんだけど。
「自分でnewしない」のがポイント。
この設計で、クラス間の依存度を下げる(疎結合にする)ことができる。
Laravelでの例
DIじゃない設計 (密結合)
public function index()
{
$request = new Request();
}
自分でRequestクラスのインスタンスを作っている。
これはクラス間の依存度が高い。
毎回newしないといけないし、テストしたり、拡張したりしにくい。
DIに基づく設計 (疎結合)
public function index(Request $request)
{
}
これはLaravelのサービスコンテナが自動でインスタンスを作ってくれる。
自分でnewしなくていい。
Laravelはサービスコンテナを使って、依存性注入が自動でできるから、
責務分離やテストがしやすいフレームワーク。
サービス層やリポジトリ層も同じ考え方
Controller ⇄ Service ⇄ Repository
コントローラの責務を分散させるのも、依存性注入の考え方に基づいている。
まとめ
- 依存性注入=依存するクラスを自分で作らず、外からもらう(注入される)設計思想
- Laravelではサービスコンテナが自動でやってくれる
- コードが疎結合になって、テストや拡張がやりやすくなる
- コントローラをサービス・レポジトリ層に分けるのも、同じ考え方