#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, который содержит информацию о конфигурациях в виде пары ключ-значение.