コントローラからサービスオブジェクトに渡すのが好きな同僚がいます。例えば、コントローラのメソッドは、以下のようになります。Railsサービスオブジェクトとコントローラ
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
は、どういうわけか私は、これは逆効果と貨物カルトソフトウェアエンジニアリングのインスタンスであると感じています。
私は、サービスオブジェクトをコントローラから完全に分離しておくことをお勧めします。依存関係はサービスオブジェクトのコンストラクタに渡され、パラメータはメソッド引数としてサービスオブジェクトに渡されます。結果は単にメソッドから返されます。
悲しいことに私の同僚は、私がコードレビューでそれを呼び出すたびに、私は順番には比較的イライラしています。
それぞれのアプローチの長所は何ですか?どのように私のケースをより良く主張できますか?私はここに何かを逃していますか