У меня есть база данных (Oracle) с некоторыми статическими таблицами. То есть значения в этих таблицах доступны только для чтения. Эти таблицы имеют структуру, как это:Хранение постоянных записей БД в коде - это плохая практика?
FOOD_TYPE_ID FOOD_TYPE_NAME
------------------------------------ ---------------
E34FD113-D793-4EA0-A0D2-6F379D1AAC00 APPLE
30939FE7-3B8E-4857-A6F8-BBCC37CF293C PEAR
25B474B4-264D-45D7-9873-F0E73484BA65 GRAPE
35B00E15-8B5D-4519-ADAC-AC4325E9DE7A MEAT
И в других таблицах есть внешний ключ на FOOD_TYPE_ID.
В моем приложении (C#) у меня есть ORM (DbLinq). И иногда я должен написать что-то вроде:
if (OrderedFood.FoodType.Name == "APPLE") ...
Это не очень удобно, хотя, потому что в этом случае я всегда нужно иметь в виду точные имена, хранящиеся в таблице FOOD. (В реальном случае эти имена гораздо больше)
Я думаю о создании класса с кучей строк, как:
public static class FoodTypes
{
public const string APPLE = "E34FD113-D793-4EA0-A0D2-6F379D1AAC00";
public const string PEAR = "E34FD113-D793-4EA0-A0D2-6F379D1AAC00";
public const string GRAPE= "25B474B4-264D-45D7-9873-F0E73484BA65";
public const string MEAT= "35B00E15-8B5D-4519-ADAC-AC4325E9DE7A";
...
}
Так что я мог бы использовать этот класс, как это:
if (OrderedFood.FoodType.ID == FoodTypes.APPLE) ...
В этом случае я всегда буду знать, какие типы FOOD у меня есть (и Visual Studio IntelliSense тоже это узнает). Я знаю, что в этом случае я дублирую значения DB в своем коде, что явно не является лучшей практикой. Но неужели это очень плохо?
А может быть, есть другой способ ссылаться на значения БД в коде?
Существует. 'OrderedFood.FoodType.Name' - правильный способ сделать это. Зачем загромождать ваш код бессмысленными идентификаторами? –