エンジニアのひよこ_level10

【毎日更新!】新卒2年目エンジニアブログです! プログラムだけじゃなく、マネジメントとかも書いていきたい!

ControllerとServiceとRepositoryにそれぞれ書くべき内容【393日目】

プログラム書くときに悩むやつ

あれ?これって、サービスに書くべきだっけ?コントローラーに書くべきだっけ?ってなる。

で、とりあえず何が正解かはわからないですが、一旦これからな?ってのを決めて見ようと思います。

対象

Controller

Service

Repository

Controller

サイトを作るときに、日本語でこのサイトはこういうウェブサイトです。って説明するときに使える部分。

あるいは、ページのHTML部分やリクエストの内容の役割の部分はControllerに記述。

例えば、『チェックボックスにチェックがついていたらメールを送る』なら、
チェックボックスにチェックがついていたら、というif文まではControllerに書いてもいい。

if (request('is_checked') === true) { 
    $mail_service->sendMail();
}

じゃないと、Controllerを見たときに、どんな動きで動作をするサイトなのかパット見わからない。
これなら、チェックボックスがtrueなら、メールを送るってのがパット見わかる。

Service

Controllerでサイトをどんな流れで動くかを説明出来たら、具体的にどんな『処理』をするかをここで書く。
ビジネスロジックと呼ばれる部分。

メールを送るときに、ジョブを作って、キューを送るとか。

かなり誤解を生む言い方ですが、エンジニアじゃない人で設計をする人が日本語でかけるようなところまでがControllerで、
プログラマーじゃないとわからないような、仕組みの辺りをServiceで書くイメージ。

Repository

データベースのデータを取得するところ。
クエリとかいい感じにしたりして、データベースから適切なオブジェクトを用意しよう。

ORMとかでいい感じのオブジェクトを返そうとしたら、だいたいRepositoryに書いてる気がする。
出来上がったオブジェクトを『使って○○をする』とかまで来ると、Serviceかな?ログインとか。

ただ、出来上がったオブジェクトを用いて、データベースをいじるってなったら当然Repository。