Использование констант для ключей сообщений и имен таблиц базы данных и имен столбцов - PullRequest
2 голосов
/ 05 октября 2009

Недавно в ходе сессии по выявлению кода об использовании констант произошла большая дискуссия. Разработчики использовали константы для следующих целей:

  1. Каждый ключ сообщения, используемый в приложении i18N, был объявлен как константа. Приложение содержало около 3000 ключей сообщений и, следовательно, такое же количество констант.
  2. Каждое имя столбца базы данных было объявлено как константа. Было около 5000 имен столбцов, и они все еще учитываются.

Имеет ли смысл иметь такое огромное количество констант в любом приложении? ИМХО, здравый смысл должен преобладать. Ключи сообщений просто не нужно объявлять как константы. У нас уже есть один уровень косвенности - зачем добавлять еще один?

Рег. имена столбцов базы данных, у меня смешанные мнения. Если столбец используется в нескольких классах, имеет ли смысл объявить его глобальной константой?

Пожалуйста, поделись своими мыслями ...

Ответы [ 4 ]

2 голосов
/ 06 октября 2009

Если ключи сообщений I18N не определены как константы, как вы обеспечиваете согласованность? Как вы автоматически различаете опечатку и пропущенное значение? Как вы проверяете, чтобы убедиться, что все ключи I18N выполнены в каждом новом языковом файле?

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

1 голос
/ 05 октября 2009

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

0 голосов
/ 05 октября 2009

Это зависит от языка программирования, я думаю.

В PHP нет ничего необычного в том, что ude определяет константы для таких вещей, хотя я бы не использовал это в Java или C #.

В большинстве проектов мы пытались извлечь SQL в шаблоны, поэтому настраивались не только имена таблиц и столбцов, но и весь SQL-оператор. Мы использовали скорость для базовой шаблонной механики, такой как переменные, маленькие циклы, ...

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

0 голосов
/ 05 октября 2009

Если константа используется в несколько мест и компилятор действительно решает проблему, да.

...