Translate

2018/11/29

ServiceObject じゃなくて、ActiveInteraction を使おう(^^)

Fat Controller の対策としてよく話題になる ServiceObject。でも、実際使ってみるとあんまりしっくりこなかったです。

感想:
・そもそも、使い方があいまい。#call ? #run ?  #perform?
・複数のクラスを操作する場合は、Facardになるの?
・外部APIの操作もServiceObjectでいいの?
・インターフェースの記述ルールが定まらない。

ServiceObject(サービス層)についての説明:
https://techracho.bpsinc.jp/hachi8833/2017_10_16/46482
https://qiita.com/joooee0000/items/369fd4676cd9dfb1f6eb
https://techracho.bpsinc.jp/hachi8833/2017_12_07/48363

ServiceObjectをアンチパターンとする記事:
https://techracho.bpsinc.jp/hachi8833/2018_04_16/55130

次の一歩

ブログ記事などを漁るなかで、こちらで紹介されている ActiveInteraction を使ってみることにしました。


○ 使ってみてよかった点:
・Gemの使い方として、ファイル構成やインターフェースが定義されていて、迷いがない。
・Validationも使える。さらに、多言語化をしやすい。
・Facard としても、Formとしても使えるし、外部API操作も実装しやすい。

☓ 良くない点:
・#run か #run! で戻り値が変わるので、それに応じた使い分けが必要。
・インターフェースの記述を覚える必要がある。

これから

1年くらいちょこちょこ使ってみたところ、少なくとも ServiceObjectよりは長期的な運用に耐えられると思いました。今後もありがたく継続して使っていく予定ですが、ブログを書いている中で改善したいところを思い出したので、本家にフィードバックしていこうと思います(^o^)