少し前にも書いた問題ですが、今日また出てきたのでちょっと考えてみる。
シチュエーション
・複数のコントローラが共通して受け取るパラメータがある。
・そのパラメータは省略可能で、省略された時は全コントローラ共通のデフォルト値を使う
このパラメータの処理をすべてのコントローラに書くのはDryじゃないので何とかしたい
解法1:パラメータをパースするスーパークラスを作る
これでやってたんだけど、Javaで考えたらありえない。「共通の機能を使いたいだけで継承使うのは…」といわれてハッと気づいた。
解法2:moduleを作る
個人的にはこのアプローチはあまり好きじゃない。moduleの中でparamsというコントローラ固有の変数をいじらなきゃいけないから。controllersディレクトリに入れればいいだろうというのもわかるけど。
解法3:Filterを作る
言われてみればこれが一番いい気がしてきた。フィルターがパラメータを触るのは当然だし、コントローラへの影響が一番小さい。
なんか、railsは動いちゃうからいろいろなことを考えずに作る癖がついてしまったかも。(railsのせいにするのはおかしいけど)
というわけで、もうちょい落ち着いて考えるようにしよう。
2008年01月24日
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/80390691
この記事へのトラックバック
http://blog.seesaa.jp/tb/80390691
この記事へのトラックバック

