Хорошо ... Я видел один из плакатов, предлагающих вам прочитать старые данные.
Во-первых, это, вероятно, лучший вариант, но, как вы говорите, в ваших приложениях беспорядок.
Вы должны потратить некоторое время на перенос чтения / записи данных на уровень абстракции. Боль, которую вы испытываете (вероятно, менее чем за 4 года), будет только усиливаться.
Хорошо ... вот как я справился с этим в долгоживущих приложениях ..
Создайте путь миграции. Создайте новый вызов класса Migrate.
В нем есть несколько функций для преобразования версии файла из n в n-1
convert_1_to_2 (fileName) {проверить версию и обновить данные.)
convert_2_to_3 (Filename) ...
Я подозреваю, что у вас есть старый код, и вы могли бы написать метод для преобразования одного бита данных в следующий.
Когда вы добавляете новые данные в данные, вы создаете новое преобразование. Знания о более ранних из них не понадобятся, и все будет хорошо и само по себе.
У вас даже могут быть субмиграции, так что частично в цикле разработки вы можете получить convert_3a_to_3b.
Теперь ... вы можете заархивировать исходную версию данных на случай, если пользователь захочет вернуться.