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

Do I need a global variable or better OO design in this rails application?

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

我觉得我正在编写糟糕的代码来传递这个对象,但我也对全局范围的解决方案犹豫不决,我什至不确定这样做的合理方法是 rails。

非常感谢您的建议!

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

config/initializers/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

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

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