はじめに
Laravelの「サービス」って、説明がわかりにくい上に普段意識しなくても使えてしまうところが嫌ですよね。
しばらく理解をほったらかしにしてしまっていたので、今回は「サービス」と向き合ってみたいと思います。
サービスとは?
- サービスコンテナ
- インスタンスの取得を自動化してくれる
- サービスプロバイダ
- インスタンスの生成処理をしてくれる
サービスコンテナとサービスプロバイダ
役割
- サービスコンテナ
- インスタンス管理
- bind:サービスコンテナにインスタンスの生成方法を登録する処理
- resolve:指定されたインスタンスをサービスコンテナが生成して返すこと
- インスタンス管理
- サービスプロバイダ
- サービスコンテナへのバインド
- イベントリスナーやミドルウェア、ルーティングの登録
- 外部コンポーネントを組み込む
関係性
- サービスコンテナ
- アプリの初期起動処理時に開始されたすべてのものが配置される場所
- サービス(クラス)を入れておく「箱」のようなイメージ
- サービスプロバイダ
- サービスコンテナにバインドをするために使われる
イメージ
クラスにはクラスとインスタンスの生成方法が記述されている。
このクラスをサービスコンテナに登録して呼び出す。
モデルとサービス
ふんわり、こんな使い分けをしています。
- モデル
- DBのあるテーブルに紐づくデータを扱う
- サービス
- DBの複数のテーブルに関連したデータを扱う
終わりに
Laravelを勉強しはじめた頃に「サービスコンテナ」や「サービスプロバイダ」について書かれた書籍を読んでもピンとこなかったのですが、インスタンスがどういうものか、実際に使ってみてサービスがどういうものか知った上で改めて調べると受け取れるものがありました。
この記事では実際の使い方には触れず、できるだけシンプルに書いてみたので、とりあえずふんわり理解をするのにお役に立てれば幸いです。
コメント