Я думаю, это еще один вопрос о жестком кодировании и передовых методах. Допустим, у меня есть список значений, скажем, фруктов, хранящихся в базе данных (он должен быть в базе данных, так как таблица используется для других целей, таких как отчеты SSRS), с идентификатором:
1 Apple
2 Banana
3 Grapes
Я могу представить их пользователю, он выбирает один, он сохраняется в его профиле как FavouriteFruit, а идентификатор хранится в его записи в базе данных.
Когда речь идет о бизнес-правилах / доменной логике, каковы рекомендации для назначения логики определенным значениям. Скажем, если пользователь выбрал «Виноград», я хочу выполнить какое-то дополнительное задание, как лучше всего ссылаться на значение «Виноград»:
// Hard coded name
if (user.FavouriteFruit.Name == "Grapes")
// Hard coded ID
if (user.FavoriteFruit.ID == 3) // Grapes
// Duplicate the list of fruits in an enum
if (user.FavouriteFruit.ID == (int)Fruits.Grapes)
или что-то другое?
Поскольку, конечно, FavouriteFruit будет использоваться во всем приложении, список может быть добавлен или отредактирован.
Кто-то может решить, что он хочет переименовать «Виноград» в «Виноград», и это, конечно, нарушит опцию жестко закодированных строк.
Жестко закодированный идентификатор не совсем понятен, хотя, как показано, вы можете просто добавить комментарий, чтобы быстро определить, какой это элемент.
Опция enum подразумевает дублирование данных из базы данных, что может показаться неправильным, поскольку оно может быть не синхронизировано.
В любом случае, заранее спасибо за любые комментарии или предложения.
MyApplication.Grape.ID
заикается, так сказать. «Яблоко» не является «Red_Apple», так как ID 3 также равен 4. Таким образом, потенциал для переименования «Apple» в «Red_Apple» не имеет больше смысла, чем объявление, что 3 равно 4 (а может быть, даже 3). Смысл перечисления - абстрагировать его числовую ДНК. Так что, возможно, пришло время по- настоящему отделить произвольные ключи реляционных БД, которые буквально не имеют смысла в бизнес-моделях.