概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: Refactor your Ruby on Rails application with parameter object pattern
- 原文公開日: 2018/02/01
- 著者: Paweł Dąbrowsk
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』をどうぞお役立てください。