はじめに
Webアプリの規模が大きくなるにつれ、ファットモデル、ファットコントローラ化が進んでしまい、保守性が低下します。
その様な場合、appフォルダ化にServiceフォルダを作成し、その下にコントローラーやモデルの処理を移していきます。
※Service層に入れるべき処理やクリーンアーキテクチャに関しては別の方の記事を参照して下さい。
今後は別の記事でサービスプロバイダやファサード、__constructについても解説していきます!!!
目次
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>
最後に
とりあえず、サービス層の使い方を紹介しました。サービス層のクラスを使う際には何の特別なこともなく、ただクラスを作成して、それを使いたいところで使うだけです。
今後は、冗長になっているインスタンス化部分の解説と、サービスプロバイダー、ファサードの解説もしていきます!!