Какой предварительный инжиниринг вы делаете для обеспечения совместимости данных для будущих версий вашего приложения? - PullRequest
1 голос
/ 24 декабря 2008

Я занимаюсь значительным рефакторингом и добавлением функций в проект и только что нарушил обратную совместимость с моими данными. Я сделал это, создав группу подклассов из класса, в котором я размещал свои данные, и загрузка старых сериализованных объектов больше не работает ..

Какую предварительную разработку или стратегии вы используете, чтобы избежать подобных ситуаций? Должен ли я полностью забыть о сериализации? Похоже, что он особенно подвержен подобным проблемам.

Ответы [ 2 ]

1 голос
/ 24 декабря 2008

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

Другими словами ...

<root>
  <something one="1" two="2"/>
</root>

... из версии A, не имеет проблем с обратной совместимостью с ...

<root>
  <something one="1" two="2" three="3"/>
  <somethingElse five="5"/>
</root>

... из ревизии B.

0 голосов
/ 24 декабря 2008

Помимо общего использования механизма сериализации, который по крайней мере несколько терпим к изменениям, как описывает dacracot, я пытаюсь настроить его так, чтобы я мог выполнить некоторую настройку процесса десериализации для каждого класса. Уродливо иметь код конверсии для старых форматов данных, но не такой уродливый, как потеря всего, что вы сериализовали.

...