Большинство проектов имеют какие-то данные, которые по существу статичны между выпусками и хорошо подходят для использования в качестве перечисления, например, статусы, типы транзакций, коды ошибок и т. Д. Например, я просто использую перечисление общего состояния :
public enum Status {
ACTIVE(10, "Active");
EXPIRED(11, "Expired");
/* other statuses... */
/* constructors, getters, etc. */
}
Я хотел бы знать, что другие делают с точки зрения настойчивости в отношении данных, подобных этим. Я вижу несколько вариантов, каждый из которых имеет свои очевидные преимущества и недостатки:
- Сохранение возможных статусов в таблице состояний и сохранение в кэше всех возможных объектов домена статуса для использования в приложении
- Используйте только перечисление и не сохраняйте список доступных статусов, создавая священную войну согласованности данных между мной и моим администратором баз данных
- Сохранять статусы и поддерживать перечисление в коде, но не связывать их вместе, создавая дублированные данные
Я предпочитаю второй вариант, хотя мой администратор БД утверждает, что наши конечные пользователи могут захотеть получить доступ к необработанным данным для генерации отчетов, а отсутствие сохранения статусов приведет к неполной модели данных (контраргумент: это можно решить с документацией).
Существует ли соглашение, которое большинство людей используют здесь? Каков опыт людей с каждым из них и есть ли другие альтернативы?
Edit:
Подумав немного, моя настоящая борьба за постоянство идет с обработкой значений идентификаторов, которые связаны со статусами в базе данных. Эти значения будут вставлены как данные по умолчанию при установке приложения. На этом этапе у них будут идентификаторы, которые можно использовать в качестве внешних ключей в других таблицах. Мне кажется, что мой код должен знать об этих идентификаторах, чтобы я мог легко получить объекты состояния и назначить их другим объектам. Что мне делать с этим? Я мог бы добавить другое поле, например, «код», для поиска элементов или просто просмотреть статусы по имени, что является icky.