在此rails应用程序中是否需要全局变量或更好的OO设计?

时间:2015-02-06 03:41:09

标签: ruby-on-rails ruby variables global

我正在编写一个rails应用程序,它使用buntine的discogs api ruby​​包装器,我的大多数对象都需要访问控制器中存在的@discogs对象,并代表整个ruby包装器和与discogs的连接。而不是将@discogs传递给其他对象,而其他对象当然需要@discogs传递给他们的其他对象,我应该在某种程度上将@discogs作为我的应用程序中的全局变量吗?

我觉得我写错了代码传递这个对象,但我对于全球范围的解决方案也犹豫不决,我甚至不确定合理的方法是什么在轨道上。

建议非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以在初始化程序中创建一个全局对象,而不是在应用程序周围传递@discogs变量:

<强>配置/初始化/ discogs.rb

DiscogsWrapper = Discogs::Wrapper.new("My awesome web app")

现在,您可以参考应用程序其他部分中的DiscogsWrapper对象。

示例1:

module Artists
  def self.search(name, wrapper = DiscogsWrapper)
    wrapper.search(name)
  end
end

示例2:

class Artist
  def get
    wrapper.get_artist(discogs_id)
  end

  private

  def wrapper
    DiscogsWrapper
  end
end

在我看来,这种方法是合理的;我在其他应用程序中看到它并且效果很好。

希望有所帮助。祝你好运!