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
不知怎的,我覺得這是適得其反,貨物邪教軟件工程的一個實例。
我寧願保持服務對象與控制器完全分離。依賴關係將被傳遞到服務對象的構造函數中,參數將作爲方法參數傳遞給服務對象。任何結果都只是從方法返回。
不幸的是,只要我在代碼審查中提出這個問題,我的同事們就不會感到非常激動,而我反過來覺得這個代碼審查比較沮喪。
各種方法的優缺點有哪些?我怎樣才能更好地辯論我的案子?我在這裏錯過了什麼嗎?