Допустим, у меня есть набор стран в моем приложении. Я ожидаю, что эти данные будут меняться, но не очень часто. Другими словами, я не смотрю на этот набор как на оперативные данные (например, я бы не стал предоставлять CRUD-операции для Country).
Тем не менее, я должен хранить эти данные где-то. Я вижу два способа сделать это:
Управляется базой данных. Создайте и заполните таблицу Country. Предоставьте какой-нибудь DAO для доступа к нему (findById()?). Таким образом, клиентский код должен будет знать идентификатор страны (который также может быть именем или кодом ISO). На стороне приложения у меня будет класс Country.
Управляется приложением. Создайте Enum, где я могу перечислить все страны, известные моей системе. Он также будет храниться в БД, но разница будет заключаться в том, что теперь клиентский код не должен иметь метод поиска (findById, findByName и т. д.) и жестко заданный идентификатор, имена или коды ISO. Он будет напрямую ссылаться на конкретную страну.
Я склоняюсь ко второму решению по нескольким причинам. Как ты это делаешь?
Правильно ли называть это «словарными данными»?
Приложение: Одна из основных проблем здесь заключается в том, что если у меня есть метод поиска, такой как findByName("Czechoslovakia"), то после 1992 года он ничего не вернет. Я не знаю, как отреагирует на это клиентский код (ведь он вроде как всегда ожидает вернуть Country, потому что, ну, это словарные данные). Еще хуже, если у меня есть что-то вроде findById(ID_CZ). Найти все эти зависимости будет очень сложно.
Если я уберу Country.Czechoslovakia из своего перечисления, я заставлю себя позаботиться о любой зависимости от Чехословакии.