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

String str = "test";

Предположим, что строка «test» используется более 50 раз во всем приложении. Почему рекомендуется хранить это в файле констант. Теперь способ работы пула строк должен фактически создавать только один объект, если он не существует в пуле, а затем делиться ссылками этого объекта на другие места по мере необходимости. Тогда зачем создавать отдельный файл констант для хранения констант?

1
Abhilash 4 Сен 2017 в 19:41

6 ответов

Лучший ответ

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

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

Очень хороший пример - система ресурсов Android для строк. Если вы храните строки в определенных файлах, проще управлять ими и переводить их.

3
Cool Guy CG 4 Сен 2017 в 16:47

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

  1. используйте константный класс с полями public static final Object CONSTANT.
  2. использовать внешнее хранилище (например, файл)

В первом случае есть 2 проблемы: сначала, если вы измените эти значения, вам нужно будет перекомпилировать проект. во-вторых, если эти переменные используются некоторыми фреймворками, вам нужно передать эти аргументы непосредственно в ваш код. Также, когда вам нужна поддержка i18n, вы можете столкнуться с проблемами при управлении правильными вариантами.

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

Тем не менее, вы не должны делать это, но это действительно хорошая практика.

0
ZhenyaM 4 Сен 2017 в 16:54

Просто: потому что дублирование кода является корнем всего зла.

Константы меньше влияют на производительность, чем на поддержание приложения в долгосрочной перспективе. Как только какое-то «свойство» используется с одним и тем же значением в разных местах - вы хотите убедиться, что все случаи использования основаны на одном и том же определении. Таким образом, когда необходимы обновления, необходимо адаптировать только одну строку кода. И не 50, с постоянно растущим шансом пропустить обновление того или иного вхождения.

0
GhostCat 4 Сен 2017 в 18:42

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

0
rorschach 4 Сен 2017 в 16:47

Следующие преимущества вы получаете

  • Во всем проекте избегается дублирование кода. Заданная строка является постоянной для всего проекта и может быть повторно использована в нескольких местах.
  • Если пользователь хочет изменить строковое значение в кодовой базе, он / она должен изменить только одно место в файле.
  • Строки не загромождают ваш код проекта, делая его понятным и простым в обслуживании
  • Если вы хотите поддерживать локализацию / i18 на других языках, это будет очень полезно. Помещение строк в файлы ресурсов значительно упрощает предоставление отдельных переводов каждой строки для разных языков.
2
nagendra547 4 Сен 2017 в 17:07

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

0
user7159290user7159290 4 Сен 2017 в 19:12