猫の魔法

主にruby系の技術メモを記載

個人的メモ:Rails AntiPatterns(4)

Rails AntiPttrnsに関する個人的メモ。今日読んだとこまで。

CHAPTER 4 Controllers

Solution: Refactor Non-RESTful Actions into Separate Controller

  • この章ではRESTfullなContollerが責務を負いすぎている例として、認証管理を上げている。
  • 認証機構はUsersコントローラのようなものに直接実装するのではなく、それ用のクラスを作りログインが必要なときに呼び出せるようにroutes.rbを記載する。
  • Railsで作成されるnewとeditアクションは純粋なRESTfulには必要ない。画面の場合のみ、人間のUI上必要になっている。

AntiPattern: A Lost Child Controller

  • 1対多のモデルをview側で多側の情報と同時に1側の情報を取得する際に、1側のIDを指定する必要があるような状態。
    • computer:display 1:多のような形だと/computer/:computer_id?display=:idのような形でアクセスするような物

      Solution: Make Use of Nested Resources

  • routes.rb側でresourceをネストするようにする。
    • /computer/:computer_id/display/:idのような形でアクセス出来るようにする。

AntiPattern: Rat’s Nest Resources

  • 同一のモデルがネストされてアクセスされる場合と、単一でアクセスされる場合の話。
    • 同じViewテンプレートを使っているが、表示条件が異なる為にView内に条件分岐が生まれてしまっている状態。

Solution: Use Separate Controllers for Each Nesting

  • Controller側をネストするものとそうでない物で分離し、Viewテンプレートも別物を使う。
    • 例えば、controllers/display_controller.rbはcontrollers/display_controller.rbとcontrollers/computer/display_controller.rbに分離する。
  • この方式にするとサブディレクトリに入るものとそうでない物が混在する可能性があるので、サブディレクトリを切るなら必要なものはみなそこに入れるようにした方がいい。
  • また、この方式はDRYの原則を弱めることに繋がる可能性があるが、上手く使えば保守しやすいコードになる。

AntiPattern: Evil Twin Controllers

  • 機能が大きくなってきて、HTMLとXMLを画面とAPIによって返し分ける必要があるようなアプリケーションの場合に、一つのメソッドの中で同時に処理を行ってしまっているようなパターン

Solution: Use Rails 3 Responders

  • Rails 3から導入されたrespond_to メソッドとrespond__withメソッドを使う事で解決出来る。
    • ★このrespon_toから呼び出している実体が恐らく掲載されているコードの他にある気がするのだが、respond_to自体を調べないとなんとも。。。

CHAPTER 5 Servicesの手前まで読了

関連

個人的メモ:Rails AntiPatterns(一覧) - 猫の魔法