"Service層"が持つ危険性について考える
「Service層とは何か」を一言で説明できる人は少ないのではないだろうか
Service層を定義しているプロジェクトは多いが、Model層のようにガッチリと責務が定義されている訳ではなく企業やプロジェクトによって、その責務はバラバラである事が多い。
今まで自分が見てきた"Service層"を紹介する
ApplicationService的な使われ方をしているService層
DomainService的な使われ方をしているService層
lib的な使われ方をしているService層
- ドメインもModelも関係していないファイル操作のような処理がService層に定義されているケース
置き場がないロジックをとりあえず置いておく為のService層
- 何でも屋さん
- Controllerに出てきてしまったファットな処理を、とりあえず退けておくのに使われる
課題はなんなのか
- 上で挙げた例が全て"Service層"と名前がつけられていた事である
- "Service層"の責務が複数存在することになる
- しっかりと責務が定義されていない場合、新規メンバーのキャッチアップは難しくなる
- コードの依存関係がめちゃくちゃになり保守は困難を極めるだろう