Dependency Injection: Vital or Irrelevant?

Factories aren't that Hard

From Back to the Wiring Problem

  def initialize(factory)
    @sensor = factory.make_pot_sensor
    @heater = factory.make_heater
  end

  class Factory
    def make_heater
      Heater.new
    end
    def make_pot_sensor
      PotSensor.new
    end
  end
  factory = Factory.new
  warmer = Warmer.new(factory)

Better Code

  def initialize(sensor_class,
                 heater_class)
    @sensor = sensor_class.new
    @heater = heater_class.new
  end

or

  factory = OpenStruct.new
  factory.heater = Heater
  factory.sensor = Sensor
  
  def initialize(factory)
    @sensor = factory.sensor.new
    @heater = factory.heater.new
  end