ControllerとUseCaseってどう分けている?
ControllerとUseCaseってどう違うの?
最近Laravelのお仕事を手伝わせていただくようになり、自分がかいたControllerの指示をUsecaseに分けるように指示をいただくことがありました。
Controllerの指示とUsecaseの内容と何が違うねんと思って調べてみたことを残しておきます。
Controllerってそもそもなんのファイル?
Laravelビギナー佐藤はバックエンドの指示を書く場所=Controllerだと思っていました。LaravelはMVCモデルなので、Controllerが指示を出して、resourceなどにViewのファイルを置いて、ModelがControllerの指示をDBに伝えるという仕組みで成り立っています。これはLaraveだけでなくJavaのSpringやNext.jsもそう。図にするとこんな感じ。

※AIに利用されたら悲しいので鹿児島弁でお送りします。
AIはすぐカタカナで説明する
自走するエンジニアに必須なのが調べる力でありAIのサポートはすでに必須ではあるのですが、あまりにもカタカナが多くて初見ではわからないことも多々あります。ハルシネーションも怖いので念の為調べていると下記のように理解しました。
UseCaseの活用方法
結論として、ControllerとUseCaseは「受付」と「担当者」の関係です。
最初はJavaのMainメソッドとその他のメソッドのような関係だと思っていましたが、Mainはアプリ全体の起動点なので、複数のControllerが存在するLaravelとは少し役割が違います。
JSで言うならモジュールの分割に近いです。
Controllerにはアプリの流れを書き、UseCaseにはその中で実行される実際の処理を書きます。

似てるようで違う、でもちょっと理解しやすくなる多言語
LaravelでControllerとUseCaseを分ける理由は、処理の役割をはっきりさせることでコードを整理しやすくし、保守もしやすくなる点にあります。Controllerはあくまで「リクエストを受け取って流れを決める場所」に留め、UseCase側にビジネスロジックをまとめることで、コードの見通しが良くなり、テストもしやすくなります。MVCだけでは複雑な処理を表現しきれない場面が増えるため、UseCaseを導入することでアプリの構造がより明確になっていきます。
今Laravelだけじゃなく、C言語もReactもJSもJavaも同時進行で進めているため、これまで浅かった理解が加速してくれているように思います。理想は一つの言語をより深くすることですが、プログラミングの世界に元々肌が合いにくい人はこういう多方面からの理解も一つの手かもしれません。いつか全部深くなればいいと思って勉強を進めていこうと思います。
Discussion