2012-04-06 26 views
0

在我正在開發的Rails應用程序中,我有許多「請求」模型。我們使用了很多Web服務,並且我們對這些服務有很多不同的請求,每個服務都有自己的邏輯(主要是驗證)。因此,他們都模塊作爲命名空間中進行分組:作爲名稱空間和mixin的Ruby模塊

module Request 
end 

所以現在每一個要求是一樣的東西:

class Request::SendSomeData 
end 

到目前爲止,一切都很好......問題是,我們將有一個很多這樣的請求會分享一些共同的邏輯。這是很容易包括模塊

class Request::SendSomeData 
    include Request 
end 

......(所以它同時充當一個命名空間和一個mixin),但我想知道是否有辦法使它不包括(因爲它要是某種代碼重複)。

有沒有一種方法讓Ruby將一些實例方法放入模塊名稱空間中的所有類中,而無需明確包含模塊?

換句話說,我能有這樣的事情:

module Request 
    def someMethod 
    end 
end 

class Request::SendSomeData 
end 

,並能夠使用

Request::SendSomeData.new.someMethod 

在同一時間?

+0

你有沒有考慮通過繼承來繼承? – 2012-04-06 09:22:00

+0

其實是的。這就像「它不是很酷」:)。如果有一些沒有那麼「傻瓜」的方式,我更喜歡另一種方式。閱讀源代碼時,命名空間看起來更可讀。 – 2012-04-06 09:32:49

回答

0

你所要求的不能沒有一些邪惡的駭客。

您要麼有太多的課程,要麼專注於一個太不重要的問題。它只是每個類的一行代碼。

另一種方法是創建一個基本模型類,正如我之前在another question中所描述的那樣,但這需要派生類每次調用set_table_name,所以它不會爲您節省任何鍵入。

+0

我在想這是一種紅寶石般的方式。由於我已經在使用命名空間,所以我認爲應該有一種方法來爲命名空間中的所有類注入功能。 你完全正確,關注於不重要的事情,無論如何:)。 謝謝 – 2012-04-09 10:28:15