2015-03-02 33 views
1

我正在考慮改進以下課程的方法,它發生在我身上:在初始化期間調用實例方法的方式很差嗎?在初始化過程中調用實例方法的時候表單不好?

最初我有方法set_last_updated_on作爲「run」方法的第一行,它可能會保留在那裏,但問題仍然如上所述。

class FinancialUpdateService 
    def initialize(stock) 
    @stock = stock 
    set_last_updated_on 
    end 

    def run 
    fetch_latest_financial_data 
    remove_duplicate_data 
    store_latest_financial_data 
    end 

    private 

    def set_last_updated_on 
    @last_updated_on = @stock.financials.first.date.to_date 
    end 

    def fetch_latest_financial_data 
    @latest_financial_data = StockDataApi.new(@stock.symbol, {start_date: @last_updated_on, end_date: Date.today-1}).financial_history 
    end 

    def remove_duplicate_data 
    @latest_financial_data.delete_if { |data| data[:date].to_date <= @last_updated_on} 
    end 

    def store_latest_financial_data 
    @latest_financial_data.each do |d| 
     @stock.financials.create(adj_close: d.fetch(:adj_close), close: d.fetch(:close), 
     date: d.fetch(:date).to_time, high: d.fetch(:high), low: d.fetch(:low), open: d.fetch(:open), 
     volume: d.fetch(:volume)) 
    end 
    end 
end 
+0

初始化初始化對象,因此調用私有方法設置狀態是非常正常的。不過,我會努力簡化初始化程序。 – Kris 2015-03-02 22:30:16

回答

3

這不是一個類方法,這是一個實例方法。

而且不,它不是可憐的形式。調用initialize中的方法是完全正常和可取的。

+0

哦,男人,菜鳥的錯誤。當它明顯是一個實例方法時,我專注於這個問題並將其稱爲類方法。謝謝你的答案。 – jBeas 2015-03-02 20:52:11

1

是的,沒有。

當您調用子類覆蓋的方法時,問題就會出現。

由於實例還沒有完全實例化,並且重寫的方法可能假設完全實例化的實例,所以可能會出現異常行爲,例如屬性可能未初始化。

相關問題