0

コントローラからサービスオブジェクトに渡すのが好きな同僚がいます。例えば、コントローラのメソッドは、以下のようになります。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 

は、どういうわけか私は、これは逆効果と貨物カルトソフトウェアエンジニアリングのインスタンスであると感じています。

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

悲しいことに私の同僚は、私がコードレビューでそれを呼び出すたびに、私は順番には比較的イライラしています。

それぞれのアプローチの長所は何ですか?どのように私のケースをより良く主張できますか?私はここに何かを逃していますか

答えて

1

私はその答えが "それに依存する"と思っています。

あなたが与えた正確な例では、特に利点はなく、ある程度難読化されています。また、一般的には、サービスオブジェクトをコントローラから分離しておくことに同意します。

しかし、コントローラをサービスオブジェクトに渡していることがあります。たとえば、ビューを動的に構築するために複雑な作業がたくさんあるときなどです。

関連する問題