

Railsを使っています。  
Formから送られてくるデータをControllerで加工していたらControllerがFatになってきました。  
Fat Controllerを解消する為にもどこか別のところに処理を移したいと思っています。

加工内容の例：

  * 入力値から関連するモデルを特定しそのIDを付加する
  * date_selectで送られてくる日付情報を元にその日の最終日時を取得し置き換える

などです。

何となく[apotonick/reform](https://github.com/apotonick/reform)等のForm
Objectを使うのが良さそうな気はしているのですが、どこに移動させるのが適切でしょうか？


CC BY-SA 3.0
2015-11-23T12:39:40.603
19211
2016-06-03T08:50:56.320
12609
question
ruby-on-rails
Fat Controllerを解消する為にFormから送られてきたデータの加工処理をどこか別のところに移したい


これが正解！というのはなかなか見つからず悩ましいですよね。  
私の場合は、

他のControllerでもよく使うような処理であれば、Concernsに切り出してます。  
<http://elegantbrew.tumblr.com/post/70990048275/controller-concerns-in-
rails-4>


CC BY-SA 3.0
2015-11-24T17:29:19.020
19260
2015-11-24T17:29:19.020
409
19211
answer


もし「コントローラが肥大化したのでそれを **まとめて**
どこかに移す」という発想をしているのであれば、肥大化した「何か」が別に出来るだけでなんの解決にもなりません。

たとえば[7 Patterns to Refactor Fat ActiveRecord
Models](http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-
activerecord-models/)という記事にはFat Modelを解消する手法が7つ紹介されていますが、7つもあるというのはつまり「Fat
Modelを解消するたった一つの適切な方法」なるものが存在しないことを意味しています。Controllerでも同じことです。

ということで、適切な移動先は個々の処理それぞれで検討する必要があります。実際の処理と関連するビューやモデルの構造が具体的に提示できれば個別に検討できるかもしれませんが、

>   * 入力値から関連するモデルを特定しそのIDを付加する
>   * date_selectで送られてくる日付情報を元にその日の最終日時を取得し置き換える
>

これだとビジネスロジックなのかそうでないかも判然としないので、なんとも言いようがありません。

また、モデルに移動できないロジックがコントローラにあるということだと、そもそもアプリケーションの構造を見直すべきかもしれません。モデルやビューの構造が不適切であるためにコントローラがその仲介をしている結果としてコントローラが肥大化している場合はそれを直さないと「余計な」処理は解消できません。


CC BY-SA 3.0
2015-11-25T02:15:51.170
19266
2015-11-25T02:15:51.170
5793
19211
answer