Мы используем Objectify с Google App Engine для Java. Мы сохраняем множество констант перечисления в хранилище данных, используя поставляемый EnumTranslatorFactory, который просто сохраняет/загружает константу, используя Enum#name(). Это хорошо работает.Обратная совместимость дополнений Enum для Objectify/Appengine
Когда мы выпускаем новые версии нашего приложения для GAE, новая версия живет рядом со старой версией, одновременно обслуживая запросы клиентов. Это хорошо объясняется Google's traffic splitting docs.
Обновления системы вводят новые константы Enum, которые вызывают ошибки во время загрузки. Например:
Версия 1 имеет следующие перечисления:
enum Meal{BREAKFAST,LUNCH,DINNER}
Version 2 имеет дополнительную константу добавляемые в перечислении для поддержки британских блюд:
enum Meal{BREAKFAST,LUNCH,TEA,DINNER}
При тестировании версии 2 приложения , TEA будет сохраняться с некоторой Entity. Впоследствии версия 1 будет загружать этот Entity, Objectify будет пытаться преобразовать TEA в Enum, используя Enum # valueOf (...), который генерирует исключение во время выполнения.
Обозначает документы, объясняющие Data Migration для перечислений, но это не удовлетворяет вышеуказанной ситуации.
Меня интересуют предложения о том, как лучше всего справиться с этой ситуацией.
Возможно, ваше предложение представляет собой сценарий и тот, который мы используем в случае переименования перечисления для целей обслуживания кода. Однако для добавления мы хотим использовать новое перечисление с новыми функциями, и это больно, чтобы создать новую функцию, а не использовать ее. Мы надеемся, что эти несколько версий будут работать бок о бок в течение нескольких недель или месяцев, чтобы наши функции были заложниками этого ограничения перечисления. –
Я не совсем уверен, какое решение вы ищете. Вы хотите написать некоторые новые данные в хранилище данных, которые не понимает старая версия вашего приложения. Магии нет, вам нужно сделать свою старую версию обработкой новых данных изящно, прежде чем вы сможете изменить структуру данных. Это относится к любой миграции, а не только к перечислениям. – stickfigure