/note/tech

Service Objectがアンチパターンである理由とよりよい代替手段(翻訳)

Service Objectよりconcernを使うべきらしいが、RoR固有の話っぽそう。

自分の場合、Service(最近はUsecaseと呼称することが多い)層はドメイン層のファサード(あるいはエントリーポイント)という認識で、アプリケーション層とドメイン層を明示的に分離する為に設置する感覚が強い。

ドメイン層とアプリケーション層が分離されているいことは、ドメイン層のユニットテストが容易という利点で十分ペイするので、あえて取り除きたいとは思わない。

Service層を作るとドメインモデル貧血症になりがちというのは実際その通りで、愚直にトランザクションスクリプトを書けてしまう問題は付きまとう。

とはいえ、そういうコードを書く者はどの道Controllerにみっちりとトランザクションスクリプトを書いてくるので、結局はレビューで解消すべき問題ではある。