У меня есть ряд объектов 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
.
Идеи?