2015-03-02 29 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

是的,没有。

当您调用子类覆盖的方法时,问题就会出现。

由于实例还没有完全实例化,并且重写的方法可能假设完全实例化的实例,所以可能会出现异常行为,例如属性可能未初始化。

相关问题