在这个 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
在我看来,这种做法是合理的;我在其他应用程序中看到过,效果很好。
希望对您有所帮助。祝你好运!
我正在编写一个 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
在我看来,这种做法是合理的;我在其他应用程序中看到过,效果很好。
希望对您有所帮助。祝你好运!