2010-06-21 2 views
1

Мы храним объекты в XML. Иногда мы обновляем базовые объекты, тогда нам нужно сохранить больше данных в наших файлах, чтобы представить дополнительные атрибуты наших объектов.Объект/XML обратная совместимость

Как организовать/внедрить систему для обеспечения обратной совместимости со старыми версиями наших файлов?

Сложная деталь возникает при просмотре нескольких версий одновременно.

Version 1 -> Version 2 -> Version 3 -> Version 4 

Должны ли мы писать четыре считывателя файлов, по одному для каждой версии файла, чтобы прочитать его в текущей последней версии нашего объекта? Или, если мы сохраним все старые версии классов с версий 1-3, чтобы старые читатели могли читать данные в этих классах, а затем инкрементальные обновления для обновления 1->2, а затем 2->3, а затем 3->4.

ответ

1

Когда я добавляю такие версии, я обычно храню старый читатель и просто обновляю его для записи в новую модель. Это означает, что у меня есть только текущая модель для остальной части моего кода, но я все еще могу прочитать старые файлы. Я бы не держать старые классы вокруг, независимо от того, какие другие варианты вы можете сделать - вы хотите локализовать количество мест в вашем коде, которые должны понимать старые версии как можно меньше (желательно одно). Если вы держите старые классы вокруг, то любой код, который имеет дело с этими классами (даже если он получен из общей базы), рискует «знать» о старых версиях, и это создает непредвиденную катастрофу обслуживания через некоторое время.

Это НЕ Панацея ... все очевидные варианты имеют проблемы. После того, как у вас будет больше, чем несколько старых читателей, становится действительно много времени, чтобы обновить их все (и не дай бог вам реорганизовать какой-то код, который им требуется, в новое пространство имен, а затем для эффективного редактирования того же кода 100 раз для замены имен). Тем не менее, я обычно использую это как шлюз для полного избавления от старых версий. Если вы разрешаете использовать только несколько считывателей старой версии для обратной совместимости, вы можете начать удалять самые старые из них каждый раз, когда вы создаете новый, что значительно уменьшает головную боль.

 Смежные вопросы

  • Нет связанных вопросов^_^