« Постоянный шаблон интерфейса - плохое использование интерфейсов »
Кто бы ни придумал эту гипотезу, каким бы гуру он или она ни был, он придумал ее на основе необходимости продолжать эффективно применять вредные привычки и практики. Гипотеза основана на пропаганде обоснованности плохих привычек в разработке программного обеспечения.
Я написал здесь ответ, опровергающий эту гипотезу: Как лучше всего реализовать константы в Java? объясняя безосновательность этой гипотезы.
В течение 10 лет этот вопрос оставался открытым, пока он не был закрыт в течение 2 часов после того, как я опубликовал свои доводы, опровергающие эту гипотезу, тем самым выставив НЕЖЕЛАНИЕ для обсуждения теми, кто придерживается этой ошибочной гипотезы.
Это те моменты, которые я высказал против гипотезы
Основанием для поддержки этой гипотезы является необходимость в методах и ОГРАНИЧИТЕЛЬНЫХ правилах, чтобы справиться с последствиями плохих программных привычек и методологий.
Сторонники тезиса « Постоянный шаблон интерфейса - это плохое использование интерфейсов» не могут назвать никаких причин, кроме тех, которые вызваны необходимостью справиться с последствиями этих вредных привычек и практик.
Решите основную проблему.
И тогда почему бы не в полной мере использовать и использовать каждую языковую функцию структуры языка Java для вашего собственного удобства. Куртки не требуются. Зачем изобретать правила, чтобы заблокировать свой неэффективный образ жизни, чтобы дискриминировать и инкриминировать более эффективный образ жизни?
Основная проблема
информационная организация. Информация, опосредующая процесс, и поведение этой информации должны быть сначала поняты вместе с так называемыми бизнес-правилами - до разработки или дополнения решений для процесса. Такой способ организации информации несколько десятилетий назад назывался нормализацией данных.
Тогда будет возможна только разработка решения, потому что согласование детализации и модульности компонентов решения с гранулярностью и модульностью компонентов информации является оптимальной стратегией.
Есть два или три существенных препятствия на пути к организации информации.
Отсутствие восприятия необходимости «нормализации» модели данных.
Заявления EF Codd о нормализации данных ошибочны, неполноценны и неоднозначны.
Последнее увлечение, маскирующееся под гибкую инженерию, - это ошибочное представление о том, что не следует планировать и обусловливать организацию модулей заранее, потому что вы можете рефакторинг по ходу дела. В качестве оправдания используется рефакторинг и постоянные изменения без препятствий со стороны будущих открытий. Существенные открытия в поведении информации о процессе заключаются в использовании бухгалтерских уловок для отсрочки получения прибыли и оценки, поэтому важные знания и их обработка сейчас считаются ненужными.
Использование констант интерфейса - хорошая практика.
Не придумывайте правила и не выдвигайте никаких фетв против этого только потому, что вам нравятся ваши специальные привычки в программировании.
Не запрещайте владение оружием по той причине, что есть люди, которые либо не умеют обращаться с оружием, либо склонны злоупотреблять оружием.
Если правила, которые вы придумываете, предназначены для новичков в программировании, которые не могут профессионально программировать и вы относитесь к их числу, тогда скажите об этом - не объявляйте свою фетву применимой к правильно нормализованным моделям данных.
Глупая аргументация - интерфейсы не предназначались камбалами языка Java для использования таким образом?
Меня не волнует, каковы исходные намерения отцов-основателей в отношении Конституции США. Меня не волнуют неписаные некодифицированные намерения. Меня волнует только то, что буквально кодифицировано в писаной Конституции, и как я могу использовать их для эффективного функционирования общества.
Меня волнует только то, что позволяют мне спецификации языка / платформы Java, и я намерен использовать их в полной мере, чтобы предоставить мне средство для эффективного и действенного выражения моих программных решений. Куртки не требуются.
Использование констант Enum на самом деле ужасная практика.
Требуется написать дополнительный код для сопоставления параметра со значением. Тот факт, что основатели Java не предусмотрели сопоставление значений параметров без вашего написания кода сопоставления, демонстрирующего константы Enum, является таким же непреднамеренным использованием языка Java.
Тем более, что вам не рекомендуется нормализовать и разбивать на компоненты ваши параметры, может возникнуть ложное впечатление, что параметры, смешанные в сумке Enum, принадлежат одному и тому же измерению.
Константы - это API Contract
Не забывай об этом. Если вы разработали и нормализовали свою модель данных, и они включают константы, то эти константы являются контрактами. Если вы не нормализовали свою модель данных, вы должны соответствовать фетвам о том, как применять ограничительное кодирование, чтобы справиться с этой вредной привычкой.
Следовательно, интерфейсы - идеальный способ реализации контракта констант.
Странное предположение - что, если интерфейс случайно будет реализован.
Ага. Кто угодно может непреднамеренно реализовать любой интерфейс. Таким непреднамеренным программистам ничто не помешает.
Разработайте и нормализуйте вашу модель данных против утечки
Не размещайте ограничительные указы для защиты предполагаемых недобросовестных действий, вызывающих утечку несогласованных / ошибочных параметров в API. Решите фундаментальную проблему, а не возлагайте вину на константы интерфейса.
Не использовать IDE - плохая практика
Нормально функционирующий и ЭФФЕКТИВНЫЙ программист не может доказать, как долго он может оставаться под водой, как далеко он может пройти в условиях сильной жары или влажных гроз. Она должна использовать эффективный инструмент, такой как автомобиль, автобус или, по крайней мере, велосипед, чтобы каждый день добираться на работу 10 миль.
Не накладывайте ограничений на коллег-программистов только потому, что вы страдаете эзотерическим аскетизмом и одержимы программированием без IDE.
Пара фреймворков призвана помочь программистам продолжать эффективно практиковать вредные привычки.
OSGI - это такая основа. И то же самое - указ против интерфейсных констант.
Поэтому окончательный ответ ...
Константы интерфейса - это эффективный и действенный способ разместить в Contract хорошо спроектированные и нормализованные компоненты модели данных.
Константы интерфейса в частном интерфейсе с соответствующим именем, вложенном в файл класса, также являются хорошей практикой для группировки всех ваших частных констант, а не разбрасывания их по всему файлу.