概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Use service object pattern to make refactoring of your Ruby on Rails app
- 原文公開日: 2018/02/03
- 著者: Paweł Dąbrowsk
Rails tips: Service Objectパターンでリファクタリング(翻訳)
このリファクタリングパターンは非常にシンプルですが、私が作業しているどのアプリでも非常に有効であることがわかってきました。Service Object(訳注: 単にServiceと書かれることもありますが、本記事では略さない方に統一しています)パターンは、クラスやメソッドのコード量が増えてしまったときにいつでも使えます。私はServiceを作るときは以下のルールを守るようにしています。
- Service Objectのクラス名の末尾には必ず
Service
を付ける - 単一責任の原則を守る(この原則はService Objectに限らない一般的なルールです)
Service Objectのアイデアをわかりやすく示すために、サンプルのService Objectクラスを作ってみましょう。
module Users
class EmailDomainService
def initialize(user)
@user = user
end
def email_domain
user.email.split("@").last if user.email.present?
end
private
attr_reader :user
end
end
このクラスは非常にシンプルでありながら、きわめて便利です。Service Objectのクラス内のコード量は抑えておくべきです。Service Objectはささやかなサービスだけを、一度に1つだけ提供すべきだからです。
このパターンは、巨大なクラスを小さなコード片に分解してサービスを分離するリファクタリングに使えます。
RSpec & TDDの電子書籍を無料でダウンロード
もっと稼ぎたい方や会社をさらに発展させたい方へ: テスティングのスキルの重要性にお気づきでしょうか?テストを正しく書き始めることが、唯一のファーストステップです。無料でダウンロードいただける私の書籍『RSpec & Test Driven Developmentの無料ebook』をどうぞお役立てください。