Я использую встроенное программное обеспечение, но на самом деле это не вопрос встраивания. Я не (по техническим причинам не могу) использовать базу данных, такую как MySQL, только C или С++ -структуры.
Существует ли общая философия, как обрабатывать изменения в структуре этих структур от версии до версии программы?
Возьмем адресную книгу. Из версии программы x в x + 1, что если:
- поле удаляется (кажется достаточно простым) или добавлено (нормально, если все могут использовать некоторые новые значения по умолчанию)?
- строка становится длиннее или короче? Int идет от 8 до 16 бит подписанного /unsigned?
- Возможно, я совмещаю фамилию/имя файла или разделяю имя на два поля?
Это лишь некоторые простые примеры; Я не ищу ответы на них, а скорее для общего решения.
Очевидно, мне нужна некоторая жестко закодированная логика, чтобы заботиться о каждом изменении.
Что делать, если кто-то не обновляется с версии x до x + 1, но ждет x + 2? Должен ли я попытаться объединить изменения или просто применить x → x + 1, а затем x + 1 → x + 2?
Что делать, если версия x + 1 ошибочна, и нам нужно вернуться к предыдущей версии s/w, но уже "обновили" структуры данных?
Я склоняюсь к TLV (http://en.wikipedia.org/wiki/Type-length-value), но может видеть много потенциальных головных болей.
Это ничего нового, поэтому я просто задавался вопросом, как это делают другие.