java 1.5: рекомендуется сохранять константы для имени столбца таблиц БД?

технологии: - Java 1.5 или 1.6 - Спящий режим 3.4

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

у меня есть следующие запросы?

  • одним из возможных решений является поддержание одного глобального файла, который хранит константы для имен столбцов всех таблиц в базе данных. как

    class DbConstants
    {
            public static final String EMPLOYEE__PERFORMANCE_DESC="performance_desc";        
    } 
    

в случае сотрудники-это имя таблица и performance_desc-это имя столбца name. Таким образом, формат tablename__columnname используется для именования константы, чтобы избежать столкновения между двумя константами двух разных таблиц, если у обеих есть имя столбца.

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

  • предположим, если я изменю имя столбца в приведенном выше примере с performance_desc на achievements_desc. В этом случае очень вероятно, что я хотел бы изменить константу и я.е от работы сотрудника___desc для работника__достижение_деск. Поскольку в этом случае мне нужно было изменить как имя столбца, так и имя константы, я не вижу большого использования константы вместо имени столбца непосредственно в моем коде, хотя есть одно преимущество, которое я могу использовать при изменении имени константы рефракция для отражения постоянного изменения имени имени везде, где ссылаются. Кажется, либо нет большого использования констант, либо я использую его неправильно.

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

    public class tbl_Employee
    {
            public static final PERFORMANCE_DESC=performance_desc;
    }    
    

это может решить некоторые проблемы с global file like table name change приведет только к изменению имени класса. Одна из главных проблем заключается в том, что я я использую класс с единственной целью определения констант, что не является хорошей практикой кодирования.

  • прочитайте некоторые, где о перечислении со строкой значения, а не int не уверен, что он доступен в java 1.5 или 1.6, и если его целесообразно использовать в данном сценарии.

  • какова наилучшая практика для данного определения констант БД?

  • действительно ли полезно использовать константы db?

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

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

  • часто утверждается, что имя таблицы и столбец имена не сильно меняются после выпуска продукта или связанной версии. Изменения в имени таблицы и имени столбца происходят в основном на этапе разработки или улучшения функций (новая версия). Является ли это сильным аргументом, чтобы избежать использования констант для имен таблиц или столбцов?

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

5 ответов


похоже, вы задаете все правильные вопросы - вы хотите сделать код более доступным для обслуживания, но понимаете, что это может стать громоздким и в конечном итоге сделать код хуже, а не лучше. Подумайте о чем-то вроде "цвета.красный цвет.ЧЕРНЫЙ."

Я нашел, что a разумный количество констант, подобных этому, делает код более читаемым. Я не думаю, что имена столбцов db принадлежат чему-то вроде этого, потому что

  • они не собираются часто менять, или, по крайней мере, не следует!--2-->

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

Я видел такие файлы БД с тысячами констант, включая пользовательские запросы, части запросов и т. д. etc (даже драгоценный камень, как public static final String COMMA=","; позаботиться о том, что написание запятых изменится в будущем). На этом этапе они переходят в строки "использовать один раз", и никто не смеет их менять.

еще одно предостережение о строковых константах-финалы компилируются в ваш класс как строки. Поэтому, если вы перекомпилируете постоянный класс, но не класс, который использует определение, можно получить новое определение, не распространяющееся.


вы рассматривали возможность использования структуры сопоставления сущностей (например, Hibernate)?

Он может хранить всю информацию таблицы базы данных (а также всю другую информацию о БД) в файле конфигурации. Он также предлагает разделительный слой между "жестким" дизайном БД и вашим приложением (что облегчит поглощение изменений в любом из них).


в моем текущем проекте, мы активно используют аннотации для многих метаданных, связанных с БД, потому что мы не можем использовать фреймворк, такой как Hibernate. Для фактических констант столбцов, да, мы используем проверенные и true public static final String. И да, она довольно хрупкая.


вы можете создать интерфейс, который определяет константы.

вот хороший пример в Android. Ищите DataColumns интерфейс.


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