2011-10-26 39 views
4

我的一個ruby類從相當大的本地XML文件中繪製數據,這些文件只會隨新部署而更改。Ruby Class方法或常量,最佳做法

在這種情況下的最佳實踐文檔保持爲常數,如:

class Product 
    XML_DOC = Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml")) 
end 

或通過類的方法來訪問文件,如:

class Product 
self.xml_doc 
    Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml")) 
    end 
end 

我認爲,類方法可能是要走的路,因爲在測試中模擬會更容易,但是保持這種內存文件的最佳做法是什麼?

+1

我喜歡gioele對你的具體問題的回答,但我不喜歡你的問題。 :-) 反而將產品對象實例化爲程序設置的一部分。 「我只需要一個」不是一個很好的理由將對象方向拋出窗外。 – sheldonh

回答

5

這是最常見的成語:

class Product 
    def xml_doc 
     @@xml_doc ||= Nokogiri::XML(open("#{Rails.root}/myxmlfile.xml")) 
     return @@xml_doc 
    end 
end 

||=經營者說,「如果變量是nil,計算expresion的結果,並且存儲它,否則什麼都不做」。這個成語叫做「memoization」。

不要以爲常量是優化代碼的一種方式,在Ruby中它們並不是真正的常量。

+4

你可以用返回去除第二行,不需要。 – tokland

+1

是的,但我喜歡用它來使事情更清晰。 – gioele

+1

根據您對Ruby的實現,隱式返回實際上可能會更快。 –