concernによるメソッドのMVC外部への切り出し
【結論】
・アプリケーションがある程度の規模になると
MVCに沿ってメソッドの切り分けを行っても、
コントローラーやモデルが肥大化して
拡張性・メンテナンス性に悪影響を及ぼす
・ ActiveSupport::Concernを用いれば
MVC外部にメソッドを切り出す事が可能になる
【目次】
【本題】
MVC外部に切り出しが必要な場面
Railsは、MVCアーキテクチャーに基づいて設計されており、
それぞれの役割に応じてコードを記述する場所を変えることで
拡張性とメンテナンス性を担保しています。
しかし、実際の業務レベルのアプリケーションは
様々な機能を実装する必要があり、MVCレベルの切り出しだけでは
コントローラやモデルが肥大化してしまい、
拡張性・メンテナンス性が落ちてしまいます。
そこで登場するのが、MVC外部へのメソッドの切り出しを
可能にするActiveSupport::Concernです。
ActiveSupport::Concernとは
ActiveSupport::Concernとは、MVC外部のconcernsというファイルに
メソッドを定義してMVCに呼び出すことで、
MVC側の記述量を減らし、またコードを共通化させることで
拡張性・メンテナンス性を向上させる為の機能です
実装例
例えば、controllerの場合は下記の様に利用します。
まず、controllersディレクトリ配下のconcernsに ファイルを作成します(名前は任意)
app/controllers/concerns/common.rb
module Common extend ActiveSupport::Concern def create_url(post) view_context.link_to post.title, post end end
これでメソッドの定義は完了です。 後は、このメソッドを利用したいコントローラーに 「include」という呼び出す為のコードを記述すれば設定完了です。
app/controllers/posts_controller.rb
class PostsController < ApplicationController include Common def create create_url(post) end