Я всегда сталкиваюсь с этой проблемой и каждый раз, когда сталкиваюсь с этим, я нахожу другое решение, которое меня не устраивает. Эта ситуация не подходит для конкретного языка, но включает в себя базу данных.
Представьте, что в приложении для управления возникает ситуация, когда пользователь (а не программист) может заполнить таблицу, которая отражает уровень навыков программирования его сотрудников. Чем он может присвоить эти значения emplyees в таблице emplyees.
Итак, ситуация в базе данных такая:
Table: ProgrammingSkillLevel
- ID
- Name
- Value
Table: Employees
- ID
- SomeUselessData
- ProgrammingSkillLevelID
В программировании я обычно делаю это как enum (я буду использовать C #):
enum ProgrammingSkillLevel
{
Starter = 0,
Medium,
Advanced,
}
Преимущество этого подхода заключается в использовании Имен вместо значений. Фактически, если мы изменим перечисление на что-то вроде этого:
enum ProgrammingSkillLevel
{
Starter = 0,
Medium,
Good,
Advanced,
}
У нас не будет проблем, потому что мы используем имена.
В моем подходе к базе данных я использую идентификаторы, чтобы избежать некоторых байтов (я знаю, что есть тип enum, но пользователь должен заполнять таблицу, а не я!), А не имена, поэтому преимущество определенно потеряно.
Какой подход я должен использовать, чтобы позволить пользователю генерировать то, что я называю "динамическими перечислениями"? Должен ли я использовать имена?
Я хотел бы найти хороший шаблон, который будет применяться ко всем моим проектам, возможно, потому что я нахожу эту ситуацию очень часто.