Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Избавиться от глобальной переменной. 
:(
    Опции темы
semibug
Дата 6.1.2013, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Класс Config читает настройки приложения из xml-файла. Множество других классов теперь обращаются к нему для получения тех или иных настроек. Пока сделал глобальную переменную Config globalConfig; не пойму как обойтись без неё. Подумываю насчет singleton, но не уверен. Подскажите пожалуйста как расположить объект/переменную в правильной области видимости, чтобы не затруднять к ней доступ, и в тоже время не делать её глобально доступной.
PM   Вверх
kemiisto
Дата 6.1.2013, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



А синглтон то тут зачем? smile 

Может передавать ссылку на globalConfig в качестве одного из параметров конуструтора всякого объекта, которому может понадобится доступ к этому globalConfig?

И всего делов. smile Это должно даже как-то по умному называться. Dependency injection судя по описанию в Вики подходит. Но я не силён в терминологии. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
semibug
Дата 6.1.2013, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(kemiisto @  6.1.2013,  11:24 Найти цитируемый пост)
А синглтон то тут зачем?

)) ну, думал завернуть этот глобальный объект прямо в класс, и давать к нему доступ через
Код

Config& Instance()
{
  static Config config;
  return config;
}

Хотя видимость объекта по сути не меняется, поэтому сомневался, надо ли оно.

Насчет передачи ссылки всем желающим тоже думал, но было лень )
Хотелось попроще, ну и вылилось в глобальные переменные.

Спасибо за ответ!

PM   Вверх
kemiisto
Дата 6.1.2013, 11:56 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



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

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



Цитата(semibug @  6.1.2013,  10:43 Найти цитируемый пост)
Хотелось попроще, ну и вылилось в глобальные переменные.

 smile Простота - штука сложная, простите за каламбур. Вам, скорее, хотелось писать поменьше кода. Но это не всегда выливается в "попроще".

Зато с Dependency Injection (теперь я почти уверен, что это оно smile ) будет попроще:
  • тестировать (легко подсунуть другой конфиг);
  • читать (всё прозрачно, видно каким образом объекты получают данные из конфига);
  • изменять (нет скрытых зависимостей от глобальных переменных).

Можно даже разные кофиги подсовывать разным объектам - мало ли.

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


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Dem_max
Дата 6.1.2013, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



множественный доступ чтения файла еще никто не запрещал, так что можно и не париться


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
bems
Дата 9.1.2013, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



Dem_max, перечитывать и парсить каждый раз?


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Dem_max
Дата 9.1.2013, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Так отпарсить пару строк не составляет труда.
А вообще ты не описал задачу полностью.


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
bems
Дата 9.1.2013, 04:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

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



я просто мимо проходил


--------------------
Обижено школьников: 8
PM MAIL   Вверх
LeonidPr
Дата 9.1.2013, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 220
Регистрация: 17.2.2012
Где: г. Чебоксары

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



Подскажите, а чем в данном случае плоха глобальная переменная? Согласен - конфиг один для всех получается, но в xml файл можно и запихать конфиги для всех модулей, если конечно система предполагается не ооочень большая. Зато единая точка для доступа к конфигам.
--------------------
pkunzip.zip
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




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


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

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