Какой смысл использовать константы для ключей свойств? - PullRequest
5 голосов
/ 15 февраля 2009

В последнее время я столкнулся с большим количеством Java-кода, который для конфигурации использует "файлы свойств". Но вместо простых старых строковых литералов код использует константы (статические конечные строки) для получения значений свойств.

Я нахожу этот дополнительный уровень косвенности раздражающим, потому что мне нужно выполнить ДВА поиска в направлении ЛИБО . Если я начну со свойства, наблюдаемого в файле конфигурации, мне придется сначала найти имя свойства, чтобы найти константу Java, а затем снова выполнить поиск, чтобы найти ссылки на константу в коде. Если я начну с кода, мне нужно будет найти фактическое значение константы, прежде чем я смогу определить значение свойства в файле конфигурации!

Какой смысл?

Я понимаю ценность использования констант для ссылки на ключи в комплекте ресурсов, обычно в поддержку i18n. Я имею в виду простые, не ориентированные на пользователя значения конфигурации. Причина, по которой я могу придумать only , состоит в том, чтобы упростить изменение имени свойства позже, но это преимущество намного меньше, чем раздражающее IMHO, особенно учитывая простоту глобального поиска и замены.

Ответы [ 5 ]

11 голосов
/ 15 февраля 2009

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

6 голосов
/ 15 февраля 2009

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

Ключевые строки должны быть достаточно описательными, чтобы они не могли сталкиваться с другими за пределами своей области видимости (обычно класса), и сохранение литералов в пределах одного класса уникальным не является ни сложным, ни вероятным настолько серьезным беспокойством, чтобы заслужить их объявление в одном блоке. Поэтому (IMO) эта практика - просто кто-то рабски следуя правилам, не понимая первоначального намерения правила.

Если вам нужно процитировать альтернативное руководство для них, чтобы оправдать ослабление этого, я могу предложить ПОЦЕЛУЙ.

5 голосов
/ 15 февраля 2009

Даже в день простого глобального поиска и замены (что не является чем-то новым) использование константы позволяет узнать, что String предназначена только для этого файла свойств. Это хорошо, потому что:

  • Константа означает, что опечатки будут вызывать ошибки компилятора, а строка не будет
  • константа позволяет разделить ключ "ID" для одного файла свойств, а ключ "ID" для другого файла XML. Та же строка, другое значение.
  • глобальный поиск и замена могут сломать множество вещей, в то время как ваша IDE позволит вам очень легко искать все значения константы и изменять только соответствующие.

Во многих случаях это просто хорошая привычка, в которую попали программисты, но хорошие привычки существуют по причине.

0 голосов
/ 15 февраля 2009

Поскольку автозаполнение лучше работает с идентификаторами констант, но если все ваши значения ключей равны «com.foo.bar.wh независимо», вы не получите обратной связи.

0 голосов
/ 15 февраля 2009

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

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

...