aakumykov
@aakumykov
Начинающий Android-разработчик

Допустимо ли «хардкодить» глобальные константы?

В моём проекте есть ряд строковых констант, определяющих имена таблиц в БД и каталогов на сервере. Это "системные" настройки, устанавливаются один раз на проект.

Задаюсь вопросом, как корректнее использовать эти константы:
  • допустимо ли применять в коде напрямую?
  • или передавать в классы через конструктор?

Начитавшись про зло жёсткого прописывания чего-то в коде, я стремлюсь передавать их через конструктор. Но начал использовать Dagger2, и такие параметры стали приводить к раздуванию и запутыванию кода (не получается использовать @Inject-конструктор, нужны модули или @AssistedInject). Прямое же использование в коде избавляет от этих проблем.
Как поступают при "правильной" разработке?
  • Вопрос задан
  • 247 просмотров
Решения вопроса 1
@mayton2019
Bigdata Engineer
Да, можно. Вот константа Math.PI захардкожена в библиотеке математики и ни у кого не возникает с этим вопросов.

По поводу констант в Dagger2. Я с ним 1 раз поработал на проекте Java/AWS/lambda стека. Для простых проектов где требуется инжекторный двигатель, но Spring затаскивать - лениво, Dagger - самое то.

По поводу допустимо или нет - да допустимо. Тем более что ты пишешь что "один раз на проект". Вот к примеру имя таблицы. Ну кому в голову придет его менять? Это объем работ на самом деле в сто крат более тяжелый. И даже не в Даггере дело а в том что таблица к тому времени станет слишком родной для environment и дешевле будет поднять новую таблицу чем переименоввать старую. Уж повертье так оно бывает.

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

Про константу PI конечно была шутка но в проекте есть два зла. Первое зло - заиграться в конфигурации и любой пустяк через них протаскивать. И второе зло - сделать проект неконфигурируемым. Я думаю что хороший проект - стоит где-то посередине.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы