在初始化不良形式期间调用实例方法?

时间:2015-03-02 20:47:49

标签: ruby class

我正在考虑改进以下类的方法,但我想到了:在初始化期间调用实例方法是不是很糟糕?

最初我将方法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

2 个答案:

答案 0 :(得分:3)

这不是一个类方法,这是一个实例方法。

不,这不是糟糕的形式。在initialize内调用方法是完全正常的,也是可取的。

答案 1 :(得分:1)

是和否。

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

由于实例尚未完全实例化,并且重写的方法可能会假定完全实例化的实例,因此可能会出现异常行为,例如,属性可能未初始化。