dimanche 16 octobre 2016

Where to initialize data needed for execution of method

I have a class that build some data and generator objects. Method generate delegates execution to generators objects. What is the best way to initialize generators and data needed for generation. I see two alternatives:

Initialize data in readers:

class SomeClass
  def generate
    generators.each(&:generate)
  end

  def generators
    @generators ||= some_data.map do |data|
      generator_class.new(data)
    end
  end

  def some_data
    @some_data ||= # initialize some not trival data
  end

  def generator_class
    @generator_class ||= # finding generator class
  end
end

or load everything in generate method:

class SomeClass
  def generate
    generator_class = find_generator_class
    some_data = initialize_some_data

    generators ||= some_data.map do |data|
      generator_class.new(data)
    end

    generators.each(&:generate)
  end

  def initialize_some_data
  end

  def find_generator_class
  end
end

Which one looks better? Maybe there is another way to do something like that?

Aucun commentaire:

Enregistrer un commentaire