Каков наилучший способ хранения общей части строк в Java?

#java #string #coding-style

Вопрос:

У меня есть очень похожая строка, похожая на эту:

 String first = "differentConfig1,config1,config2,config3,config4,config5,config6,config7,config8,config9"; String second = "differentConfig2,config1,config2,config3,config4,config5,config6,config7,config8,config9"; String third = "differentConfig3,config1,config2,config3,config4,config5,config6,config7,config8,config9";  

где config1 … config9 одинаковы в каждой строке, но differentConfig1, differentConfig2 и differentConfig3 различны

как лучше всего избежать дублирования config1-9 в каждой строке?

(Обратите внимание, что значения config1-9 имеют длину около 1 строки)

То, что у меня есть сейчас, — это:

 private String commonConfiguration() {  return "config1,config2,config3,config4,config5,config6,config7,config8,config9" }  

а затем строки строятся следующим образом:

 String first = "differentConfig1,"   commonConfiguration();  

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

Комментарии:

1. «Очень длинная переменная» где -то будет существовать, действительно ли имеет значение, где именно? Хотя я мог бы предложить использовать массив строк и объединить их; постепенно их будет легче читать, изменять и рассуждать.

2. Если это фиксированная строка, достаточно статической конечной строки.

3. Если вы беспокоитесь о удобочитаемости, почему бы не создать отдельный класс «конфигурация», в котором есть какие-либо статические строки и т. Д., Которые понадобятся вашему проекту. Затем вы можете просто импортировать, когда это необходимо

4. Интересно, как эти «конфигурации» будут использоваться позже? Код, использующий это, анализирует ваши строки, извлекает значения и использует их для чего-то? Значение: концептуально ваши конфигурации могут быть перечислением , а затем различные наборы конфигураций представляются в виде перечисления … и только когда вам нужно выйти «за пределы» JVM, у вас будет ОДИН фрагмент кода, который преобразует такие перечисления в строки. Но передавать необработанные строки, как … как уже было сказано: пахнет как запах кода.

Ответ №1:

Строки конфигурации лучше сохраняются в файлах. Так работает и большинство систем. Пример: Большинство систем, таких как Kafka или Cassandra, имеют конфигурации входа в систему, расположения файлов журнала, адресов и т.д. В таких файлах конфигурации.

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

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

firstConfig=»differentConfig1,config1,config2,config3,config4,config5,config6,config7,config8,config9″ secondConfig=»differentConfig2,config1,config2,config3,config4,config5,config6,config7,config8,config9″ thirdConfig=»differentConfig3,config1,config2,config3,config4,config5,config6,config7,config8,config9″

Я действительно не предлагаю разбивать его дальше, но если вы уверены, что у них всегда будет один и тот же commonPrefix, один из вариантов-сделать что-то вроде этого:

В файле свойств firstConfig=»differentConfig1″ secondConfig=»differentConfig2″ thirdConfig=»differentConfig3″ commonPrefix=»config1,config2,config3…. config9″

И в своем коде вы читаете эти строки конфигурации и добавляете их. Что — то вроде этого:

 String c1 = Registry.getString("firstConfig") Registry.getString("commonPrefix") String c2 = Registry.getString("secondConfig") Registry.getString("commonPrefix") String c3 = Registry.getString("thirdConfig") Registry.getString("commonPrefix")  

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