Управление версиями объекта Ruby

У меня есть ряд объектов Ruby, которые моделируют базовый XML (например, OXM). К сожалению, XML изменяется, и соответствующая версия удаляется. Мне нужно обновить свои объекты Ruby, чтобы иметь возможность обрабатывать обе версии. Я бы хотел что-то более чистое, чем тонна предложений if / else в моих методах, так как это, вероятно, повторится снова. Есть ли идиоматический Ruby-способ справиться с этим?Я думал об использовании базового класса в качестве прокси для различных «версионных» классов, то есть

class XMLModel
  class V1 
    # V1 specific implementation
  end

  class V2;
    # V2 specific implementation
  end

  def initialize
    # create a new V? and set up delegation to that specific version of the object
  end

  def from_xml(xml_string)
    # use the XML string to determine correct version and return a 
    # specific version of the object
  end
end

. Хорошая особенность вышеупомянутого метода заключается в том, что каждая версия отличается в коде, что позволяет мне добавлять / удалять версии с небольшим отступом тестирование совместимости. Плохо то, что я, скорее всего, получу много дублирования кода. Кроме того, в этом случае XMLModel.new возвращает новый XMLModel , а фабричный метод XMLModel.from_xml возвращает новый XMLModel :: V1 .

Идеи?

6
задан John Straughn 5 July 2011 в 14:50
поделиться