2010-04-25 63 views
8

免责声明:虽然我问Rails应用程序的情况下,我不谈论Rails的helper(即视图助手)在Ruby中使用助手方法的首选方式是什么?

比方说,我有一个辅助方法/功能:

def dispatch_job(job = {}) 
    #Do something 
end 

现在我想用这个从几个不同的地方(主要是控制器,但也有一些BackgrounDRb工人)

什么是做到这一点的最佳方法是什么?

我能想到的两种可能性:

1.使用一个类,使辅助静态方法:

class MyHelper 
    def self.dispatch_job(job = {}) 
    end 
end 

class MyWorker 
    def run 
    MyHelper.dispatch_job(...) 
    end 
end 

2.使用模块和包括该方法为任何我需要此功能

module MyHelper 
    def self.dispatch_job(job = {}) 
    end 
end 

class MyWorker 
    include MyHelper 

    def run 
    dispatch_job(...) 
    end 
end 

种3.我不知道其他的可能性还

... 

第一种是更类似于Java的,但我不知道,如果第二个实际上是一个适当使用Ruby的模块。

回答

2

模块的方法是我将采取的方向。我更喜欢它,因为它的灵活性和它可以让你组织代码的程度如何。我想你可以争辩说,他们只是另一种混合形式。我一直认为混入作为一类特殊

class Foo 
    def hello 
    'Hello' 
    end 
end 

class Foo 
    def allo 
    'Allo?' 
    end 
end 

f = Foo.new 
f.hello => 'Hello' 
f.allo => 'Allo?' 

似乎总是非常具体的直接扩展,而模块的方法可以扩展任何类,你包括进去。

同行

2

如果你要使用在你的控制器和一些其他的代码,你可以创建一个混合并将其添加到您的应用程序控制器,从其他控制器的派生,这样在你的控制器,你可以拥有它,然后您可以将该模块添加到其他外部课程。

+0

为什么是更好比静态类的方式? – 2010-04-25 09:52:56

+1

这是一个很好的问题,我想我会随同静态类或某种通用库一起使用随机自包含的方法,我需要遍布整个位置,并在需要我的方法访问控制器数据时扩展应用程序控制器(如params等)。 – 2010-04-25 09:56:57

相关问题