2010-04-25 62 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

相關問題