Свойства перечисления или строки grails, какая разница в будущих обновлениях БД? - PullRequest
0 голосов
/ 08 ноября 2011

Допустим, каждый создает свойство приоритета в виде строки, используя ограничение:

priority(inList:['Critical', 'Major', 'Normal', 'Enhancement'])

Альтернативой может быть использование перечисления следующим образом:

enum Priority { CRITICAL, MAJOR, NORMAL, ENHANCEMENT }  or
enum Priority { CRITICAL('Critical'), MAJOR('Major'), NORMAL('Normal'), ENHANCEMENT('Enhancement')

Priority priority
    ...

и, возможно, следующееВ зависимости от того, как enum определен выше:

static mapping = { priority enumType:"ordinal"} 

Мой вопрос: будет ли добавление будущих значений enum работать с базой данных очень хорошо, если они будут добавлены в конце?Кроме того, если я хочу изменить то, как интерпретируется значение enum, это лучший способ сделать это, например, как:

 ... NORMAL('Minor')

или все будет работать хорошо, если я просто поменяю 3-еэлемент в списке, какой я хочу, например

    MINOR or  MINOR('Minor')

1 Ответ

2 голосов
/ 08 ноября 2011

Не должно иметь значения порядок, в котором они появляются.Внутри Grails просто выполнит поиск valueOf с учетом строкового представления.Теперь, изменение имени одного вызовет проблемы, если вы не обновите базу данных должным образом.Если вы знаете, что это произойдет, в процессе производства вы можете пересмотреть перечисления и перейти к таблице типов для справки.Таким образом, вы просто используете идентификатор, поэтому не имеет значения, какое это строковое значение.

Я склонен использовать какую-то комбинацию из 2. Перечисления для жестких и быстрых констант, которые, я знаю,как правило, собирается оставаться устойчивым в производстве.Но таблицы типов для случаев, когда пользователи должны иметь возможность добавлять / изменять / удалять различные значения или если я знаю, что у меня будет какое-то хранилище данных, таблицы типов лучше / быстрее благодаря внешним ключам, с вашимзапуск мельничных систем хранения (MySQL, Postgres и т. д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...