😱

ジュニア開発者のなんちゃってアーキテクチャ探索記① --Serviceクラスの違和感--

2022/11/21に公開

経緯

UserControllerに色々書いてたらFatControllerになっちゃったよ・・・・
解決方法無いか調べてみるか....

ん?Serviceクラスを作って処理を分離させよう!?

UserControllerからビジネスロジックをUserServiceに分離した!!
これでFatController問題は解決だ!!

.....ん??

課題

あれ?処理は分離できたけど、ビジネスロジック部分をごっそり移動させたFatServiceが出来上がった...

解決策

ユースケースごとに処理を分ける

例えばユーザーを登録する処理をUserControllerに全部書いていた場合

UseCases\User\Create.php

にロジックを分離し、controller側から呼び出す。

実際は主語のでかいServiceクラスを
Hoge/HogeXXXXService
という具合に分離しました。

疑問

  • Serviceクラスとの使い分け
    • 引用に書いた解決策は,ServiceクラスをUseCaseもどきのように扱う解決策。
      • UseCaseそのものはUseCaseに、ある程度汎用的な処理そのものはServiceクラスに書く??

備考

Serviceクラスを作ってみよう!みたいな記事、ごっそり処理を移動させただけで根本的な解決をしていないものが多い気がする。

❌ FatController内の処理をServiceクラスに分離しよう!!
🟢 FatController内の処理をUseCase毎でServiceクラスに分離しよう!!

の方が良い気がする。

PS:デメテルの法則を良い感じに守ろうとServiceから他のServiceを呼ぶのを禁止にしたら、それはそれで問題が色々出てきたので最近そのルール辞めました。

参考記事

https://cloudsmith.co.jp/blog/backend/laravel/2022/03/2052565.html

https://qiita.com/joker1007/items/25de535cd8bb2857a685

https://qiita.com/br_branch/items/37cf71dd5865cae21401

Discussion