Генерировать Enums из базы данных или наоборот? - PullRequest
6 голосов
/ 01 сентября 2011

Я пытаюсь выяснить, какой «правильный» способ сделать это. У меня есть несколько таблиц поиска в моей базе данных, и я хотел бы поместить перечисление поверх этих значений, чтобы при кодировании было легче читать (а также не использовать жестко закодированные значения).

Мне интересно, должен ли я генерировать свои табличные значения на основе существующего перечисления или мне следует генерировать мое перечисление из значений моей таблицы.

EDIT

Основываясь на первой паре комментариев, вот некоторые пояснения:

Частота изменения значений может быть довольно частой, поскольку они должны быть достаточно динамичными. Тем не менее, компиляция будет необходима перед добавлением любого из них в любом случае, потому что перечисление необходимо обновить, чтобы представить новые значения.

Основная причина этой необходимости заключается в том, что мы не хотим связывать людей с определенным списком значений, мы хотели бы, чтобы приложения имели возможность добавлять новые записи по мере необходимости.

В прошлом мы генерировали данные из перечислений, но я второй догадываюсь сам

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Обычно мы генерируем перечисления из базы данных.Мы используем CodeSmith , что позволяет нам создавать файлы проекта, которые могут легко восстанавливать перечисления по мере необходимости.

Иногда мы пошли другим путем, обычно для целей отчетности (когда существующие значения перечисления)сохраняются).

И, конечно, у нас есть перечисления, значения которых никогда не сохраняются.

Как правило, единственная причина для создания перечислений из базы данных - это если код должен принимать решения на основеих.Если вы просто хотите заполнить ComboBox и сохранить выбор пользователя, не генерируйте перечисление.

Очевидно, что принятие решений на основе перечислений (или строк), значения которых могут измениться, хрупко.Возможно, вы захотите включить даты истечения срока действия (или даты «от» и «до») в схему базы данных, чтобы существующие значения не удалялись.Фильтр значений с истекшим сроком при заполнении селекторов пользовательского интерфейса.Это также облегчает ссылочную целостность.

Как всегда в C #, вы должны знать, что значения перечисления могут выходить за пределы ожидаемого диапазона.Включите default в ваш switch.

Мы придумали вспомогательные классы для создания кэшированных списков поиска, которые облегчают их использование.

Я не рекомендую идти по этому пути,Если нужно, вот как мы это сделали.

0 голосов
/ 01 сентября 2011

Существует также третий вариант, в котором у вас есть явная модель, которая описывает схему на требуемом уровне детализации, а затем вы генерируете как данные, так и схему из этой модели.

Что касается вашего вопроса, я думаю, что вам следует подумать о проблеме в вашем контексте и перечислить плюсы / минусы для вас с каждой альтернативой и решить, что наиболее целесообразно для вас и вашего бизнеса.

Я работал со всеми тремя стратегиями для разных приложений, и лично я предпочитаю иметь явные модели в зависимости от контекста.

Извините за нечеткость, но я думаю, что для такого рода вопросов есть настоящее золотое правило, которое всегда применяется во всех случаях.

...