Избавиться от глобальной переменной.

 
0
 
C++
ava
semibug | 06.01.2013, 11:59
Класс Config читает настройки приложения из xml-файла. Множество других классов теперь обращаются к нему для получения тех или иных настроек. Пока сделал глобальную переменную Config globalConfig; не пойму как обойтись без неё. Подумываю насчет singleton, но не уверен. Подскажите пожалуйста как расположить объект/переменную в правильной области видимости, чтобы не затруднять к ней доступ, и в тоже время не делать её глобально доступной.
Ответы (8)
ava
kemiisto | 06.01.2013, 11:24 #
А синглтон то тут зачем? smile 

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

И всего делов. smile Это должно даже как-то по умному называться. Dependency injection судя по описанию в Вики подходит. Но я не силён в терминологии. smile 
ava
semibug | 06.01.2013, 11:43 #
Цитата (kemiisto @  6.1.2013,  11:24 findReferencedText)
А синглтон то тут зачем?

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

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

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

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

Спасибо за ответ!
ava
kemiisto | 06.01.2013, 11:56 #
Цитата (semibug @  6.1.2013,  10:43 findReferencedText)
Хотелось попроще, ну и вылилось в глобальные переменные.

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

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

Так и живём. Код пишеться ("с нуля") один раз, а читается-правится потом сотни тысяч раз. Так что главное требование - лёгкость внесения изменений. Если бы было иначе самого понятия архитектуры ПО не было бы.
ava
Dem_max | 06.01.2013, 17:51 #
множественный доступ чтения файла еще никто не запрещал, так что можно и не париться
ava
bems | 09.01.2013, 00:24 #
Dem_max, перечитывать и парсить каждый раз?
ava
Dem_max | 09.01.2013, 03:56 #
Так отпарсить пару строк не составляет труда.
А вообще ты не описал задачу полностью.
ava
bems | 09.01.2013, 04:04 #
я просто мимо проходил
ava
LeonidPr | 09.01.2013, 07:52 #
Подскажите, а чем в данном случае плоха глобальная переменная? Согласен - конфиг один для всех получается, но в xml файл можно и запихать конфиги для всех модулей, если конечно система предполагается не ооочень большая. Зато единая точка для доступа к конфигам.
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить