エンジニアのひよこ_level10

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

【メモ】Controller、Service、Repositoryの分け方の考え方の一つ【424日目】

プログラムの役割を分ける

コードを書いていて、各コードの役割はきっちり分けたい。

やってることごっちゃごっちゃになったらコード読むの大変だしね。

ただ、その時に分け方もあやふやだと、結局ごちゃごちゃしたコードになって意味がない。

ということで、定義をしっかり考えたい。

フォロワーさんがアドバイスくれました。

ってことで、頂いたアドバイス

どういうこと?

Controller

Controllerでは、ユーザーがFormとかで入力して来た値を、いい感じに変換する。

例えば、数値をもらいたいのに、数字の文字列が来たりとかいろいろありますよね。

それらを変換したり、一部だけを切り抜いて、Serviceに引数として与えてやる。

$this->user_service->xxxFunc($request['number']);

Repository

データの永続化。つまり、データベースとかにデータを保存することとかをやる。

あるいは、永続化したものを取り出したりとか。

このとき、toArrayとかで変形しちゃだめだよ。あくまで、値を取ってくるだけ。

Laravelなら、モデルクラスか、それが入ったコレクションがそのまま取ってこれる状態。

return $this->user->all();

Service

データの永続化に関わらないところ。

メール送信したり、データ加工したり等々。

この後、戻り値でControllerに値を渡したりするわけなので、returnではいい感じの値にしてあげようね。

定義を意識しよう

ちゃんと、一貫して書けば、定義がごっちゃごっちゃにならないはず。

でも、定義の仕方間違えたな・・・って思ったら、いい感じにリファクタリング頑張ろう。

リファクタリング、どこかでしないと、あとでつらい思いをするのは、自分自身でもあるし、自分だけでは収まらないよ・・・!