2012-12-13 126 views
1

如果我想記憶一個模塊中某個方法的結果,是否認爲是不好的做法?在模塊中使用實例變量是不好的做法嗎?

想象我有一個導軌幫手:

module FooHelper 
    def values_for_thingie 
    if some_condition && that_other_condition 
     { a: "foo", b: "bar" } 
    else 
     { a: "bar", b: "baz" } 
    end 
    end 
end 

假設Rails視圖是要多次調用這個輔助方法..一個拿到了「A」的值,另一個獲得價值「b」 ......讓我們也假設some_condition的是,做了超級複雜的,所以我們不希望這樣的被調用一次以上做的方法...

這可以通過執行來解決:

module FooHelper 
    def values_for_thingie 
    @values_for_thingie ||= \ 
     if some_condition && that_other_condition 
     { a: "foo", b: "bar" } 
     else 
     { a: "bar", b: "baz" } 
     end 
    end 
end 

然而,我不喜歡這種感覺,因爲這個實例變量與FooHelper的一個實例無關。它不是真的在它的控制之下。所以出於這個原因,看起來這不是一個好的解決方案。

回答

1

如果條件在實例間是恆定的,它應該可能是類/模塊方法。然後,用於記憶的實例變量將成爲該類/方法的實例變量。沒有錯。或者,也可以將其保留爲實例方法,並使用類變量進行記憶。

1

你的實例變量並不住在你的模塊中,但在類的實例中的模塊包含在。

在您的例子@values_for_thingie在FooHelper定義,但將生活在一個實例的ActionView。

因此,如果values_for_thingie的結果必須在請求之間改變,那麼您的做法是正確的。

但是,您應該考慮只記住需要一段時間運行的方法some_condition

相關問題