2017-01-30 2 views
0

У меня есть база данных (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 в своем коде, что явно не является лучшей практикой. Но неужели это очень плохо?

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

+0

Существует. 'OrderedFood.FoodType.Name' - правильный способ сделать это. Зачем загромождать ваш код бессмысленными идентификаторами? –

ответ

0

Лучше делать публичную библиотеку Food.dll, в которой объявляют все, что вам нужно, как перечисление (-и) и добавляют ссылку на ваш проект.

public enum FoodTypes 
{ 
    APPLE, 
    PEAR, 
    GRAPE, 
    MEAT, 
    ... 
} 

Так что после этого вам не нужно проверять, зарегистрированы ли вы в классе, подобном записям базы данных, без проверки чека и т. Д.
EDIT:
Вы можете добавить идентификаторы для каждого из них, чтобы сохранить историю заказов в базе данных.

Apple = 1, 
Meat = 2 
Смежные вопросы