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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Паттерны для хранения информации 
:(
    Опции темы
alexsaltykov
Дата 10.11.2009, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. 
Есть информация в приложении которая определяется один раз и нужен доступ к ней из любого класса приложения
Допустим информация о подключении к базе дынных или информация об авторизированном пользователе.
Хотел бы узнать мнение профи.  Кто и как хранит и получает данную информацию. Какие паттерны применяет.

PM MAIL   Вверх
ivanovpv
Дата 10.11.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Ну это называется не паттерн, хотя вопрос понятен...

Я лично использую или файлы пропертис или SQL таблички или XML. Все зависит от типа информации. Если данных немного то файлы пропертис - самое оно. Если много, тут без SQL никак не обойтись. Если нормального SQL под рукой нет - то беру Hypersonic SQL (встроенный в JDK Derby DB не люблю).
Если структура данных сложная и требуется обеспечить чтение и для другой программы/платформы - лучше двигать в сторону XML.

Редко когда конечно могут понадобиться и свои собственные форматы файлы - ну тут как говорится полет фантазии не ограничен, хотя... надо все таки стараться держаться хоть каких-то стандартов, скажем типа RIFF


--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
alexsaltykov
Дата 10.11.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Все таки, я наверно немного некорректно вопрос задал ... 

Т.е. предлагаешь эти данные записать в промежуточный файл, а потом писать метод извлечения этих данных в каждом классе в котором эти данные потребуются?
Немного неудобно ...
Не легче ли запихнуть их в глобальную переменную?
PM MAIL   Вверх
Temdegon
Дата 10.11.2009, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я так понял, вам нужен паттерн Singleton
В системе будет существовать только один обьект этого класса, инициализироваться он тоже будет только один раз, и из любого места программы вы сможете получить ссылку на этот обьект через статический метод getInstance() и вызывать нужные вам методы этого класса.

PM MAIL   Вверх
COVD
Дата 10.11.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата

Не легче ли запихнуть их в глобальную переменную?


Например, если пользователь вводит логин-пароль, то их удобно хранить в статических переменных (Singleton). Или ( только для строковых данных ) можно положить в системные свойства  ( System.setProperty(..)  , System.getProperty(..)    ). Тоже доступно везде в приложении. 

Однако если приложение имеет параметры в файле, то их, параметры, в некоторых случаях лучше каждый раз извлекать из файла, а не хранить в переменной. Например, есть параметры соединения - адрес и порт. Тогда можно пересоединить приложение не останавливая (актуально для серверных приложений) его. Просто редактируется проперти файл и дается команда reconnect. 
PM MAIL   Вверх
ivanovpv
Дата 10.11.2009, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Цитата(alexsaltykov @  10.11.2009,  17:12 Найти цитируемый пост)
Все таки, я наверно немного некорректно вопрос задал ... 


Скорее я неправильно понял smile

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

Есть еще другой способ, правда я от него потом отказался. В каждой аппликации все свои классы наследовать от одного класса (можно и абстрактного) и в теле этого класса держать все свои глобальные переменные - тогда автоматом в каждом классе будут доступны все глобальные данные. Удобно, но как то показалось хлопотно.

Видел в сети и другие реализации - типа Dymanic Scoping, Single Factory и проч. но не применял.  



--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
Temdegon
Дата 10.11.2009, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Кроме того, что это известный паттерн - этим его достоинства и ограничиваются. Многие не любят его - я тоже, но все равно использую... 

А чем он так плох? ума не приложу. Отличный паттерн ИМХО. Это конечно не значит, что любую задачу нужно под него подгонять. Но тем не менее, я лично не вижу недостатков.
PM MAIL   Вверх
alexsaltykov
Дата 10.11.2009, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Да, singleton, похоже мне подойдет.

Спасибо за помощь   smile 
PM MAIL   Вверх
ivanovpv
Дата 11.11.2009, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Варвар
**


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

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



Цитата(Temdegon @  10.11.2009,  18:35 Найти цитируемый пост)
А чем он так плох? ума не приложу.


А хотя бы тем, что это потенциальная брешь и в сложных системах которые работают через рефлексию вполне возможно инстанциировать несколько экземпляров одного и того же Singleton класса. Есть также проблемы и при сериализации/десериализации.



--------------------
Aut viam inveniam aut faciam
PM MAIL Skype   Вверх
chaos
Дата 11.11.2009, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


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

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



Цитата(ivanovpv @  11.11.2009,  07:40 Найти цитируемый пост)
потенциальная брешь

такая брешь имхо называется: сам дурак
PM WWW   Вверх
math64
Дата 11.11.2009, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Эта брешь - в конкретной реализации синглетона.
А есть брешь в самой идее синглетона, если синглетон не константный объект, а приложение многопоточное.
В случае если нужно хранить константные данные, вместо синглетона в Java можно использовать интерфейс (недостаток - проблемы с переводом на другие языки программирования):
Код

public interface Config {
String SERVER_HOST = Main.getServerHost();
int SERVER_PORT = Main.getServerPort();
}

public class Main {
...
static String getServerHost() { ... }
static int getServerPort() { ... }
...
}

public class SomeClass implements Config {
    ...
    Socket socket = new Soket(SERVER_HOST, SERVER_PORT);
    ...
}

PM   Вверх
alexsaltykov
Дата 11.11.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



И что тогда рекомендуется использовать в многопоточных приложениях вместо sbgleton ???
PM MAIL   Вверх
Temdegon
Дата 11.11.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

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

Ну если сильно захотеть, то можно и *** сломать =)
Цитата

Есть также проблемы и при сериализации/десериализации.

А зачем сериализовать, к примеру, пул соединений?
Цитата

А есть брешь в самой идее синглетона, если синглетон не константный объект, а приложение многопоточное.

А какие проблемы с многопоточностью? Вроде синхронизацию никто не отменял?
PM MAIL   Вверх
math64
Дата 11.11.2009, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Temdegon @  11.11.2009,  15:35 Найти цитируемый пост)
А какие проблемы с многопоточностью? Вроде синхронизацию никто не отменял?

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

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

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


 




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


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

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