Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Где лучше хранить константы в интерфейсе или, в классе? 
:(
    Опции темы
Royan
  Дата 30.3.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Народ, где вы храните константы и почему? 


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Kangaroo
Дата 30.3.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 21
Всего: 104



Цитата(Royan @  30.3.2008,  14:48 Найти цитируемый пост)
Народ, где вы храните константы и почему?  

Хранить константы в интерфейсе это вроде антипаттерн.


--------------------
Lost....
PM MAIL MSN   Вверх
Royan
Дата 30.3.2008, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Вот тут нашлось:

JLS3 "13.4.9 final Fields and Constants"
Цитата

[...]We also recommend, as a general rule, that only truly constant values be declared in interfaces.[...]



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
w1nd
Дата 31.3.2008, 00:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Константы следует хранить там, где они нужны smile Например, общие константы для Swing-компонент, находящиеся в интерфейсе SwingConstants - это явно порочная практика.



--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
mbasil
Дата 31.3.2008, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



То есть порочной практикой является наличие вообще каких-либо ОБЩИХ параметров,  настраивающих приложение? Правильно я понял ? 
И это потому, что нарушает ООП, поскольку глобальные (static) параметры это явное нарушение.
То есть надо помещать необходимые параметры (дублируя их) во все классы?
В какой момент? При инициализации приложения ?
PM MAIL   Вверх
w1nd
Дата 31.3.2008, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(mbasil @  31.3.2008,  09:17 Найти цитируемый пост)
То есть порочной практикой является наличие вообще каких-либо ОБЩИХ параметров,  настраивающих приложение? Правильно я понял ? И это потому, что нарушает ООП, поскольку глобальные (static) параметры это явное нарушение.То есть надо помещать необходимые параметры (дублируя их) во все классы?В какой момент? При инициализации приложения ?

Нет, вы неправильно поняли. Точнее вы ничего не поняли. При чём здесь ООП - вообще непонятно. Констант, глобальных для всего приложения практически не бывает - все имеют "хозяина", о дублировании чего вы ведёте речь - непонятно.

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







Это сообщение отредактировал(а) w1nd - 31.3.2008, 09:34


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
mbasil
Дата 31.3.2008, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 2
Всего: 13



Цитата

Констант, глобальных для всего приложения практически не бывает

А как же, например быть с константой PI, определенной в Math классе?
Подвергнуть разработчиков SUN остракизму?
Не знал, откровенно говоря, что разделитель строк я всегда должен "выковыривать" вызовом метода класса System, а константу использовать неправильно. 
PM MAIL   Вверх
math64
Дата 31.3.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Quod licet Jovi non licet bovi - что дозволено Юпитеру(Sun-у) не дозволено быку.
При разработке библиотек для Java заранее неизвестно, где константы понадобятся - поэтому они и объявлены в специальных классах и интерфейсах.
Простому же пользователю обычно заранее известно, где его константы будут использоваться, поэтому ему луше следовать совету w1nd.
PM   Вверх
w1nd
Дата 31.3.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(mbasil @  31.3.2008,  12:07 Найти цитируемый пост)
А как же, например быть с константой PI, определенной в Math классе?

На мой вгляд, эта константа как раз на своём месте.

Цитата(math64 @  31.3.2008,  12:35 Найти цитируемый пост)
При разработке библиотек для Java заранее неизвестно, где константы понадобятся - поэтому они и объявлены в специальных классах и интерфейсах.

Почему неизвестно? Если делается класс, методы которого воспринимают некоторые значения, то именно в этом классе и объявляются константы, соответствующие этим значениям.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Royan
Дата 1.4.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



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

http://java.sun.com/j2se/1.5.0/docs/guide/...tic-import.html
http://java.sun.com/docs/books/jls/third_e...omp.html#13.4.9

Теперь мой подход:
Код

package org.megaware.constants;
 
public final class Constants {
   public final static int GENERIC_INT = 0;
   // some other generic consts here
   public final static class Network {
       // some other Network consts here
       public final static int DEFAULT_PORT = 55888;
   }
   
   public final static class Gui {
       // some other GUI consts here
       public final static String APP_TITLE = "Megaware";
   }
}


Это сообщение отредактировал(а) Royan - 1.4.2008, 14:04


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
w1nd
Дата 1.4.2008, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(Royan @  1.4.2008,  14:02 Найти цитируемый пост)
Теперь мой подход

Гм. Именно для продемонстрированных констант я не вижу никакого смысла в таком вынесении - они явно не общие smile 


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Royan
Дата 2.4.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: 3
Всего: 15



Какой же вы занудливый человек w1nd, мимо вас, поди, ни одна соринка не пролетит - все сдуете. Это всего лишь пример измените имена на что душе угодно.


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
ki6opr
Дата 2.4.2008, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 67
Регистрация: 20.12.2006

Репутация: нет
Всего: нет



а можно вопрос а зачем для констант делать свой класс есть замечательная вещь Enum называется smile 
PM MAIL ICQ   Вверх
w1nd
Дата 2.4.2008, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


Профиль
Группа: Завсегдатай
Сообщений: 1077
Регистрация: 22.3.2006
Где: Москва

Репутация: 20
Всего: 54



Цитата(Royan @  2.4.2008,  00:15 Найти цитируемый пост)
Какой же вы занудливый человек w1nd, мимо вас, поди, ни одна соринка не пролетит - все сдуете.

Есть грешок smile 

Цитата(Royan @  2.4.2008,  00:15 Найти цитируемый пост)
Это всего лишь пример измените имена на что душе угодно. 

Всё равно smile Сейчас я ковыряюсь в Eclipse - плагин ваяю. Так вот в SWT как раз есть такой классец - с константами (их там сотни). Не устаю проклинать каждый день того, кто это придумал - жутко неудобно smile Вот и стараюсь предостеречь.

Это сообщение отредактировал(а) w1nd - 2.4.2008, 08:19


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
ecologist
Дата 2.4.2008, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 452
Регистрация: 28.2.2007

Репутация: 2
Всего: 9



А по-моему надо там, где логика подсказывает.

В конце концов public static final - и хоть в классе, хоть в интерфейсе. Все зависит от того к чему эта константа привязывается - а использовать советы по проектированию надо с головой.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1303 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.