1

コントローラーをサービス オブジェクトに渡すのが好きな同僚がいます。たとえば、コントローラ メソッドは次のようになります。

class FooController < ApplicationController

  ...

  def show
    Foo.new(self).call
  end

  ...

end

サービス オブジェクトは次のようになります。

class Foo

  attr_reader :controller, :resource_id

  delegate :render, :params, :head, to: :controller

  def initialize(controller, resource_id)
    @controller = controller
    @resource_id = resource_id
  end

  def call
    resource = SomeActiveRecordModel.find(resource_id)
    if resource
      render json: resource.to_json
    else
      head :not_found
    end
  end

end

どういうわけか、これは逆効果であり、カーゴカルトのソフトウェア エンジニアリングの例であると感じています。

サービスオブジェクトをコントローラーから完全に分離したいです。依存関係はサービス オブジェクトのコンストラクターに渡され、パラメーターはメソッドの引数としてサービス オブジェクトに渡されます。結果はメソッドから単純に返されます。

悲しいことに、私がコード レビューでこの問題を持ち出すたびに、私の同僚はこれにまったく興奮していません。

それぞれのアプローチの長所と短所は何ですか? どうすれば自分の主張をうまく主張できますか? ここで何か不足していますか?

4

1 に答える 1