我有一个简单的课程:
class Repository
class << self
def find(id)
...
end
end
end
在整个应用程序中都会这样调用:
thing = Repository.find("abc")
我们在Sinatra / rack环境中。在请求阶段,我们会这样做:
env['org'] = 'acme'
我想要做的是能够从类'acme'
内部访问Repository
,而不必明确地传入它。这个类的调用次数太多了每次通过find方法传递值时会很痛苦的地方,例如find(id,org = nil)
。我想也许有一种方法可以将机架宝石包含在Repository中,并以此方式实现,但到目前为止还没有运气。全局变量已经结束 - 必须确定请求的范围。
是否可以做这样的事情?
答案 0 :(得分:0)
就我个人而言,我认为在类方法中有一个像变量那样变化的变量会遇到麻烦,它会通过跨越边界来打破Law of Demeter。相反,我将它包装在Sinatra助手中,然后默认传递第二个参数。
helpers do
def find( s )
Repository.find( s, env['org'] )
end
end
并修改Repository
的{{1}}方法以获取第二个参数。