Мы находимся в процессе рефакторинга некоторого кода. Существует одна особенность, которую мы разработали в одном проекте, который мы хотели бы использовать в других проектах. Мы извлекаем основу этой функции и делаем ее полноценным проектом, который затем может быть импортирован по текущему проекту и другим. Эти усилия были относительно прямолинейными, но у нас одна головная боль.Java: рефакторинг статических констант
Когда исходная структура была спроектирована, мы решили сохранить множество постоянных значений, определенных как статические поля в одном классе. Со временем этот список статических членов рос. Класс используется в очень многих местах нашего кода. В нашем текущем рефакторинге мы будем поднимать некоторых членов этого класса на новые рамки, но оставим других на месте. Наша головная боль заключается в извлечении членов фонда этого класса для использования в нашем новом проекте и, более конкретно, о том, как мы должны обращаться к тем извлеченным членам в нашем существующем коде.
Мы знаем, что мы можем иметь наш существующий класс подкласса Constants этого класса Constants нового проекта и наследовать все статические члены родителя. Это позволило бы нам осуществить изменение, не касаясь кода, который использует эти члены, чтобы изменить имя класса в статической ссылке. Однако жесткая связь, присущая этому выбору, не кажется правильным.
перед:
public class ConstantsA {
public static final String CONSTANT1 = "constant.1";
public static final String CONSTANT2 = "constant.2";
public static final String CONSTANT3 = "constant.3";
}
после:
public class ConstantsA extends ConstantsB {
public static final String CONSTANT1 = "constant.1";
}
public class ConstantsB {
public static final String CONSTANT2 = "constant.2";
public static final String CONSTANT3 = "constant.3";
}
В нашей существующем коде отрасли, все вышеперечисленное будет доступны таким образом:
ConstantsA.CONSTANT2
Я хотел бы запрашивать аргументы о том, является ли это «приемлемым» и/или какова наилучшая практика.
Повторите свою последнюю пулю: все равно будут иметь струны повсюду. Я не понимаю, почему properties.get («SYMBOL») лучше, чем Constants.SYMBOL –
Вы правы, но это зависит от использования константы, которую я бы сказал. Если это текст для отображения, он принадлежит в комплекте. И тогда мы хорошие разработчики, но имена пучков в постоянные классы - рекурсия hurra –
спасибо за ваш ответ. Я согласен с комментарием интерфейса (я даже не рассматривал его). Вопрос, который вы задаете, заключается в следующем: для чего используются эти константы? У нас есть множество применений - некоторые являются значениями String для отображения (например: заголовки столбцов таблицы), некоторые из них являются постоянными значениями в примитивах, третьи - постоянными ключами для использования в Maps. – akf