1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Laravel】依存性注入(DI)のなんとなくざっくり理解

Posted at

背景

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ではサービスコンテナが自動でやってくれる
  • コードが疎結合になって、テストや拡張がやりやすくなる
  • コントローラをサービス・レポジトリ層に分けるのも、同じ考え方
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?