個人的メモ: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
- computer:display 1:多のような形だと/computer/:computer_id?display=:idのような形でアクセスするような物
- 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
Solution: Use Rails 3 Responders
- Rails 3から導入されたrespond_to メソッドとrespond__withメソッドを使う事で解決出来る。
- ★このrespon_toから呼び出している実体が恐らく掲載されているコードの他にある気がするのだが、respond_to自体を調べないとなんとも。。。
CHAPTER 5 Servicesの手前まで読了