プログラムの役割を分ける
コードを書いていて、各コードの役割はきっちり分けたい。
やってることごっちゃごっちゃになったらコード読むの大変だしね。
ただ、その時に分け方もあやふやだと、結局ごちゃごちゃしたコードになって意味がない。
ということで、定義をしっかり考えたい。
フォロワーさんがアドバイスくれました。
ってことで、頂いたアドバイス。
レイヤー分け、良いですよねー!
— 吉田あひる (@strtyuu) 2018年11月16日
僕は
Controller -> 外部から来た値をServiceが欲しがっている形に変換する役割
Service -> データの永続化に関わらないビジネスロジック
Repository -> データの永続化に関わるビジネスロジック
という単純な感じでやってます!
どういうこと?
Controller
Controllerでは、ユーザーがFormとかで入力して来た値を、いい感じに変換する。
例えば、数値をもらいたいのに、数字の文字列が来たりとかいろいろありますよね。
それらを変換したり、一部だけを切り抜いて、Serviceに引数として与えてやる。
$this->user_service->xxxFunc($request['number']);
Repository
データの永続化。つまり、データベースとかにデータを保存することとかをやる。
あるいは、永続化したものを取り出したりとか。
このとき、toArrayとかで変形しちゃだめだよ。あくまで、値を取ってくるだけ。
Laravelなら、モデルクラスか、それが入ったコレクションがそのまま取ってこれる状態。
return $this->user->all();
Service
データの永続化に関わらないところ。
メール送信したり、データ加工したり等々。
この後、戻り値でControllerに値を渡したりするわけなので、returnではいい感じの値にしてあげようね。
定義を意識しよう
ちゃんと、一貫して書けば、定義がごっちゃごっちゃにならないはず。
でも、定義の仕方間違えたな・・・って思ったら、いい感じにリファクタリング頑張ろう。
リファクタリング、どこかでしないと、あとでつらい思いをするのは、自分自身でもあるし、自分だけでは収まらないよ・・・!