У меня есть приложение Java, которое использует класс «Страна». Бизнес-логика связывает каждую страну мира:Использование перечисления в Java в качестве альтернативы небольшой базе данных
- Код iso.
- Телефонный код страны вызова
- список часового пояса базы данных TZ Идентификаторы подходит для этой страны
Обычно это данные идеально подходит для базы данных. Однако, учитывая тот факт, что эти данные довольно стабильны (конечно, время от времени оно меняется, но обычно оно не используется для выполнения операций создания/обновления/удаления в этих записях). Я думал о том, чтобы помещать информацию в список, например это:
public enum Country
{
US(1,new String[]{"America\New York","America\California",...}),
...
NL(31, new String[]{"Europe\Amsterdam"});
...
public Country(int telephoneCode, String[] timezoneIds)
{
...
}
}
Возможные преимущества такого подхода:
- данных непосредственно из источника подъезд кода Java, так что нет никакой задержки с выполнением запросов к базе данных.
- Нет необходимости в настройке и обслуживании файла базы данных где-то (что это большое дело для меня, потому что я не знаком с JDBC еще)
Недостатки могут быть:
- Данные скрыты внутри исходного кода и не обновляются автоматически, если политика меняется.
- Код должен быть перераспределен при изменении перечислений. (См. this question.) .) .
- Насколько хорошо производительность «больших» перечислений (более 200 возможных значений) по сравнению с запросами базы данных для получения конкретной информации?
Я хотел бы задать вопрос по смещенному вопросу (недостаток № 3), но любые комментарии относительно более широкой картины приветствуются.
Я знаю класс Locale в java, который можно использовать для получения списка всех возможных стран, известных в java-системе. К сожалению, информация о телефоне и часовом поясе недоступна. Мое намерение слишком объединить эти данные в одно перечисление. Является ли эта практика признанной правдоподобной альтернативой или хакерством?
Если у вас есть перечисление, но вы никогда не использовать константы в исходном коде, е у него запах кода. Это похоже на данные, которые должны находиться в базе данных. Слишком рано беспокоиться о производительности без реальных тестов, но если все остальное не удается, вы всегда можете кэшировать весь набор данных. – biziclop
Производительность поиска значений в перечислении 200 членов по сравнению с выполнением запроса к базе данных аналогична производительности перехода в следующую комнату по сравнению с посещением луны. Доступ к памяти намного быстрее, чем совместная работа в сети с базой данных. –
В дополнение к комментарию JB, даже если у вас были эти данные в БД, было бы предпочтительнее кэшировать их один раз в памяти и обращаться к ним за раз в кеш. – A4L