Rails: Service Objectはもっと使われてもいい(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Why Aren’t We Using More Service Objects Already 原文公開日: 2017/11/08 著者: Aaron Lasseigne — フリーランスのRuby/JavaScript開発者で、ActiveInteractionの作者です。 なお、Aaron Lasseigne氏の言うService ObjectとAvdi Grimm氏の言うService Objectは違うものを指しているのではないかという意見がBPS社内でありました。 Rails: Service Objectはもっと使われてもいい(翻訳) Avdi Grimm氏は最近のブログ記事で、Service Objectの盛り上がりに苦言を呈していました。Service Objectを擁護しようと思い、Service Objectにどんな欠点があるのか読んでみたくなりました。私の使うこのツールの長所と短所を知りたかったのです。しかし記事の内容は私の期待とは異なり、私の経験と真っ向からぶつかるものでした。 Avdiは冒頭で、PayPalのIPNデータを処理する「重すぎるコントローラ」を取り上げていました。皆さんもこの巨大過ぎるコントローラアクションを記事でご覧になったでしょう。これはよくある問題であり、修正したくなる問題です。彼はService Objectを1つ作成してコントローラのコードのほとんどをそこに移動しました。移動後の構造は次のような感じです。 class IpnProcessor def process_ipn(…) # ここにコントローラのコードを書く end end 続いてIpnProcessor.new.process_ipnには「コードの匂い」があることを指摘しています。この命名は冗長であり、同義反復的な悪いコードに見えるとのことです。 ipn processor new process ipn まさしく彼の言うとおりです。この命名はよくないものであり、Service Objectで通常使われている命名法からも外れています。チームでService Objectを使う場合、callまたはrunといったメソッド名で統一するのが普通です。 class IpnProcessor def call(…) … … Continue reading Rails: Service Objectはもっと使われてもいい(翻訳)