0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Laravel 可読性の高いコードを書く為のサービス層(app/Serviceフォルダ)の使い方 シンプルに解説!!

Last updated at Posted at 2021-12-02

はじめに

Webアプリの規模が大きくなるにつれ、ファットモデル、ファットコントローラ化が進んでしまい、保守性が低下します。
その様な場合、appフォルダ化にServiceフォルダを作成し、その下にコントローラーやモデルの処理を移していきます。
※Service層に入れるべき処理やクリーンアーキテクチャに関しては別の方の記事を参照して下さい。

今後は別の記事でサービスプロバイダやファサード、__constructについても解説していきます!!!

目次

  1. Serviceフォルダ作成
  2. クラス名やメソッドを記述
  3. Controllerでサービスクラスを使用する
  4. Viewでサービスクラスを使用する
  5. 最後に

Serviceフォルダ作成

・appフォルダ下にServiceフォルダを作成します。
・Serviceフォルダ下にファイルを作成します。今回の場合はCalculation.phpとします。
※実際にはServiceの下にいくつかフォルダを作成して、その下にファイルを作成する構成となります。

<?php

namespace App\Services;

class クラス名
{
    // この中にファットコントローラーの原因になっているメソッドを記載する。
}

クラス名やメソッドを記述

こちらは足し算と引き算ができる簡単な処理です。

<?php

// Serviceフォルダの下にフォルダを作成している場合、パスを追記してください。今回は特に追加記述なし。
namespace App\Services;

// クラス名を追記
class Calculation
{
       // 足し算のメソッドを追記
    public function addition($number) {
        return $number + 1;
    }

      // 引き算のメソッドを追記
    public function subtraction($number) {
        return $number - 1;
    }
}

Controllerでサービスクラスを使用する

これで、Serviceフォルダ内のCalculationクラスにあるメソッドを使用する事が出来ます。

//  Controller(どのコントローラーでもいいです・・・)

// Calculationクラスのuse宣言
use App\Services\Calculation;

public function index()
{
    // クラスのインスタンス化
    $calculation = new Calculation;
       
    // Calculationクラスのadditionメソッドで足し算を行う。
    // ddの結果 => 2
    dd($calculation->addition(1));

    // Calculationクラスのsubtractionメソッドで引き算を行う。
    // ddの結果 => 0
    dd($calculation->subtraction(1));
}

Viewでサービスクラスを使用する

コントローラーだけでなく、Viewファイルでも呼び出す事ができます。
しかし、これではuse宣言やインスタンス化の処理をいちいちView側に記載しなければならない為、見づらく保守性が悪くなってしまいます。
その為、このuse宣言やインスタンス化をせずに済む方法を次回紹介します!!

Viewファイル

<?php 
    // use宣言
    use App\Services\Calculation;
    // インスタンス化
    $calculation = new Calculation;
?>

// 足し算の処理
<div>{{ $calculation::addition(1) }}</div>

// 引き算の処理
<div>{{ $calculation::subtraction(1) }}</div>

【以下出力結果】
Image.png

最後に

とりあえず、サービス層の使い方を紹介しました。サービス層のクラスを使う際には何の特別なこともなく、ただクラスを作成して、それを使いたいところで使うだけです。
今後は、冗長になっているインスタンス化部分の解説と、サービスプロバイダー、ファサードの解説もしていきます!!

0
2
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
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?