LoginSignup
1
0

More than 5 years have passed since last update.

引数オブジェクト(parameter object)を使ってみる

Posted at

Railsのプロジェクトで、「引数オブジェクト(parameter object)」というようなパターンを使ってみました。

ご注意

なお、ここでの「引数オブジェクト」は「コントローラーとビューのやり取りに使うもの」に限定しています。もちろん、他の場面にも使える手法ではあるのですが、今回はここだけ考えてみます。

前提となる問題

Railsの場合、モデルに値を登録するようなフォームであれば、Active Recordが強力なので、あまり悩むこともなく実装が可能です。一方で、検索や集計ページを何も考えずに実装していくと、細かい引数だらけになって、引数を処理するコードが「コントローラーで、ビューから来た引数のパース」「コントローラーで、引数を使った実際のデータ抽出処理」「ビューで、値の再表示処理」など、あちこちに散らばってしまって、コントローラーの見通しも悪くなるなど、あまりきれいでないコードとなってしまいます。

解決策としての引数オブジェクト

では、引数オブジェクトを作ってみましょう。このオブジェクト自体には

  • paramsなど入力からの変換機能
  • パラメーターとして使うハッシュの生成機能
  • パラメーターとして受け取った値から、関連するモデルなどを生成する機能

これらの機能をもたせることで、コントローラーの仕事はほぼ「この引数オブジェクトを生成するだけ」になります。

なお、この引数オブジェクトをActive Modelで作る、という選択肢もありますが、バリデーションが不要なら単なるオブジェクトでもいい気がします。

この観点で見直してみる

引数のハンドリングを担う「引数オブジェクト」という観点から他のRailsコードを見てみると、Active Record自身や、検索を行うRansackも、この引数オブジェクトとして働いていることが見えてきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0