Наша фирма разрабатывает в основном на Java и поддерживает ряд «живых» систем (в основном длительно работающие серверные процессы), все из которых зависят от общих справочных данных и перечислений. Иногда определение перечисления расширяется, чтобы включить новое значение, и в этом случае мы в настоящее время повторно развертываем все наши приложения, когда это происходит, причина в том, что каждое наше приложение имеет личную папку "lib", содержащую все библиотеки jar ( включая библиотеку "enum entity"). Очевидно, это нежелательно, и поэтому мне было бы интересно услышать рекомендации или подходы других людей.
Идеи, которые я придумал:
- Изменение сценария запуска каждого приложения для получения самой последней версии библиотеки "enum entity" и добавление файла jar в путь к классам.
- Какой-то механизм для динамической загрузки класса нового определения перечисления во время выполнения.
Проблема с этими подходами заключается в том, что приложения обычно имеют код в формате:
switch(enumVal) {
case A:
// Do something.
break;
case B:
// Do something.
break;
default:
throw new IllegalArgumentException("Invalid enum value: " + enumVal);
}
... и, следовательно, начнутся сбои, когда они попадут в случай по умолчанию. Возможно, это говорит о том, что эти сущности вообще не должны быть перечислениями; в нашем случае это действительно компромисс удобства. Или, возможно, это просто говорит о том, что наши приложения слишком хрупкие и должны более изящно обрабатывать случай по умолчанию.