Rails:Service層を運用して良かったところ、悪かったところ - Qiitaより
■Service層とは?
Service層は、エンティティや値オブジェクトに属さない層で、振る舞いだけを記述する層です。
MVCではService層がないため、単体のModelで完結しない処理を無理矢理ControllerかModelに詰め込むしかなかったですが、Service層を入れる事で、単一Modelで完結しない処理を一つの処理として切り出して記述することができます。
■Service層の定義(ルール)
Service層を作成するにあたって、今回は下記のルールに基づいて設計してあります。
- 一つのModelで複数のミドルウェアと通信する場合はService層に書く
- 複数のModelが絡み合う処理はService層に書く
- Service層では振る舞いだけを定義する(状態を持たないためModuleで設計する)
■運用してみて感じた事
メリット
- ModelやControllerがシンプルになり、読みやすい
- postとsearchに分けてあるとコードが整理されて、どこに何が書いてあるかわかりやすい
- 処理がservice層に切り出されている為、Modelのテストが書きやすい
デメリット
- チームで認識が揃っていないと運用が難しい (サービスの役割とモデルの役割について人によって解釈が違うと、どこになにが記述してあるか逆に分からなくなる)