リファクタリングとは
リファクタリング (refactoring) とは、コンピュータプログラミングにおいて、プログラムの外部から見た動作を変えずにソースコードの内部構造を整理することである。
なんのためにやるのか(小僧主観)
- 他の人が見てもわかりやすくするため(見通しをよくする)
- コードを再利用できるようにするため
Railにおける具体的なリファクタリング(Controller)
下記、よく見るControllerの記述。
app/controllers/products_controller.rb
class ProductsController < ApplicationController before_action :set_cart ~ ~ ~ private def set_cart @cart = Cart.find_by(id: session[:cart_id]) if @cart.nil? @cart = Cart.create session[:cart_id] = @cart.id end end end
app/controllers/top_controller.rb
class TopController < ApplicationController before_action :set_cart ~ ~ ~ private def set_cart @cart = Cart.find_by(id: session[:cart_id]) if @cart.nil? @cart = Cart.create session[:cart_id] = @cart.id end end end
上記2つのコントローラーでは全く同じset_cart
というメソッドを定義していおり、どちらもインスランスにカートのインスタンスを差し込んでいる。
さらにset_cart
は上記のインスタンス以外でも使用する可能性があるためできれば部品化しておきたい。
そんな時にはconcerns
に処理を切り出すのが良さげ。
では早速リファクタリングする。
app/controllers/concerns/current_cart.rb ←これを新たに作る
module CurrentCart extend ActiveSupport::Concern private def set_cart @cart = Cart.find_by(id: session[:cart_id]) if @cart.nil? @cart = Cart.create session[:cart_id] = @cart.id end end end
app/controllers/products_controller.rb
class ProductsController < ApplicationController include CurrentCart before_action :set_cart end
app/controllers/top_controller.rb
class TopController < ApplicationController include CurrentCart before_action :set_cart end
以上で共通化完了!