私はこのロジックを以下に示します。 2つのコントローラは、同じロジックをアクション内に持っています。 common_logic1 common_logic2 common_logic3
、私は共通のロジックを分離したいが、それを行う方法は分かっていない。一般的なロジックをコントローラから分離する最も良い方法は何ですか
class ServicesController < ApplicationController
...
def download
some_logic_for_services
common_logic1
common_logic2
common_logic3
end
...
end
class PackagesController < ApplicationController
...
def download
some_logic_for_packages
common_logic1
common_logic2
common_logic3
end
...
end
第1の方法は、ApplicationControllerにメソッドを作成し、それを継承することです。 しかし、私はこの方法が太いapplicationControllerの最後に行くと思う。
class ApplicationController < ActionController::Base
...
def common_logic
common_logic1
common_logic2
common_logic3
end
...
end
class ServicesController < ApplicationController
...
def download
some_logic_for_services
common_logic
end
...
end
class PackagesController < ApplicationController
...
def download
some_logic_for_packages
common_logic
end
...
end
第2の方法は、ロジックをヘルパーモジュールに分けて含めることです。しかし、私はヘルパーが論理から見解を分離することだと思います。
module CommonHelper
...
def common_logic
common_logic1
common_logic2
common_logic3
end
...
end
class ServicesController < ApplicationController
include CommonHelper
...
def download
some_logic_for_services
common_logic
end
...
end
class PackagesController < ApplicationController
include CommonHelper
...
def download
some_logic_for_packages
common_logic
end
...
end
activesupportの::懸念にロジックを分離する第三の方法は、と私は、この選択は、この場合で最高だと思います。
module Commonable
extend ActiveSupport::Concern
...
def common_logic
common_logic1
common_logic2
common_logic3
end
...
end
class ServicesController < ApplicationController
include Commonable
...
def download
some_logic_for_services
common_logic
end
...
end
class PackagesController < ApplicationController
include Commonable
...
def download
some_logic_for_packages
common_logic
end
...
end
誰かが私にこれら3つの方法の賛否両論を教えてもらえますか?解決策があればpleseが教えてくれます。ありがとうございました。
ありがとうございます。 ActiveSupport :: ConcernとService Layerを使用する状況は何ですか。どのように区別するのですか? –
サービス層はビジネスロジック用です。サービスクラスは、コントローラ、モデル、またはレーキタスクで使用できます。コードにコントローラに関連するメソッド(リダイレクト、パラメータ...)がある場合は、ActiveSupport :: Concernを使用します。 –