Я делаю игру для Android на Android (хотя этот вопрос действительно относится ко всем языкам) и надеюсь выпустить первую версию в ближайшее время. Я нервничаю из-за того, как я сохраняю данные в моей игре. Моя проблема в том, что, если в более позднем обновлении я решу сохранить больше данных или сохранить те же данные другим способом, мне нужно быть осторожным, чтобы не потерять или не испортить данные для пользователей, которые обновляются (т.е. я хочу, чтобы пользователи быть в состоянии использовать данные, созданные старой версией в новой версии, например, их высокие оценки, полученные ранее).
Например, скажем, я хочу сохранить рекорды в версии 1, и я использую такой класс, как:
class Score { String name; int score; }
Затем я сохраняю результаты в ArrayList, а затем, чтобы сохранить / загрузить результаты, я сериализую объект ArrayList.
В версии 1.1, возможно, я решу, что хочу сохранить дату с каждым счетом. Затем я мог бы обновить объект Score, включив в него поле даты и использовать значения по умолчанию для даты, если старый объект не содержит дату.
В версии 1.2, возможно, я решу, что вместо этого я хочу хранить оценки в TreeSet, а в версии 1.3, возможно, я хочу также загружать / хранить оценки онлайн.
В любом случае, я хочу сказать, есть ли какие-нибудь общие советы, как облегчить мне жизнь здесь? Я особенно обеспокоен ситуациями из вышеперечисленного, когда один человек обновляет с версии 1.1 до 1.2 и один человек обновляет с 1.0 до 1.2. Тестирование всех сценариев на предмет повреждения данных звучит как головная боль.
Неужели это действительно сложный случай, чтобы выбрать что-то разумное и масштабируемое для начала?
Я думаю, что было бы легко использовать HashMap из String-> Object в качестве объекта хранения общего назначения, например. storage.put ("HighScoreName1", "Bob"); storage.put ("HighScorePoints1", 15) ;. Получение информации немного сложнее, чем если бы я использовал пользовательский класс, но, кажется, легко добавить дополнительные поля и так далее без особой работы. Перебор списков, сохраненных таким образом, не очень хорош.