Rails中服务对象和应用程序之间的交互

时间:2014-05-10 15:04:23

标签: ruby-on-rails service-object

我正在处理一个有很多服务对象的应用程序。通常,这些服务的工作是构建一个或多个Active Record模型。为了避免将我的服务绑定到应用程序,我允许用户修改模型的名称。这是一个例子:

class MyServiceObject
  attr_reader :options

  def initialize(options = {})
    @options = options
    @options[:foo_klass] ||= Foo
  end

  def do_something
    options[:foo_klass].new
  end
end

我认为它运作得很好,但我发现这种解决方案在某些情况下缺乏灵活性。例如,我有一项服务需要使用其中一个属性查找模型。这就是我想要实现它的方式:

class MyServiceObject
  attr_reader :options

  def initialize(options = {})
    @options = options

    @options[:lookup_proc] ||= Proc.new do |attribtue|
      DefaultModel.find_by_attribute(attribtue)
    end
  end

  def do_something(attribtue)
    options[:lookup_proc].call(attribtue)
  end
end

我不确定它是最合适的解决方案。在一些文章中,他们使用另一个服务对象,一种"适配器",但对于这样一个简单的用例来说似乎有些过分。

你有什么建议吗?我要继续目前的做法吗?

0 个答案:

没有答案