Tech Racho エンジニアの「?」を「!」に。
  • Ruby / Rails関連

Rails tips: Parameter Objectパターンでリファクタリング(翻訳)

概要

原著者の許諾を得て翻訳・公開いたします。

Rails tips: Parameter Objectパターンでリファクタリング(翻訳)

1つのメソッドにやたら多くのパラメータを渡さないようにするのに苦労することがあります。こんなときはParameter Objectパターンの出番です。Parameter Objectはパラメータを属性として持つ素朴なRubyオブジェクトであり、パラメータをいくつも渡す代わりに1つのオブジェクトインスタンスを引数として渡せます。このパターンのメリットがよくわかるサンプルのクラスを見てみましょう。

class Notificator
  def push_update(title, content, category)
    some_api_class.push(title: title, content: content, category: category)
  end
end

上では更新をAPIにプッシュするサンプルクラスが使われています。みてのとおり、このパラメータはAPIメッセージに関連しています。シンプルなクラスでParameter Objectを作成します。

class ApiMessage
  attr_reader :title, :content, :category

  def initialize(title:, content:, category:)
    @title = title
    @content = content
    @category = category
  end
end

それではNotificatorクラスを書き換えて、メソッドで必要な引数が1つで済むようにしてみましょう。

class Notificator
  def push_update(api_message)
    some_api_class.push(title: api_message.title, content: api_message.content, category: api_message.category)
  end
end

コードが読みやすくなり、テストもしやすくなりました。ここで重要なのは、Parameter Objectをごくシンプルなオブジェクトとしての利用にとどめていることです。さもないと、このリファクタリングパターンの意図が失われ、余計な機能と大量のコードを抱えた普通のクラスになってしまいます。


RSpec & TDDの電子書籍を無料でダウンロード

もっと稼ぎたい方や会社をさらに発展させたい方へ: テスティングのスキルの重要性にお気づきでしょうか?テストを正しく書き始めることが、唯一のファーストステップです。無料でダウンロードいただける私の書籍『RSpec & Test Driven Developmentの無料ebook』をどうぞお役立てください。

関連記事

Rails tips: Simple Factoryパターンによるリファクタリングの使いどころ(翻訳)

Railsで重要なパターンpart 1: Service Object(翻訳)

Railsで重要なパターンpart 2: Query Object(翻訳)


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。