Название: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: sarbash от Марта 13, 2010, 00:51 Начитался тут всякого-разного...
В общем, и меня постигло неизбежное - нужно где-то положить несколько общедоступных параметров. Начитался, что в этом случае синглтоны - самое тру. Но возник вопрос: что я не могу сделать с синглтоном, что я мог бы сотворить с переменной, завёрнутой в namespace? То есть, есть ли на самом деле резон городить класс, или это вопрос принципа и религии? К примеру: Код: namespace sgt { Помогите, пожалуйста, определиться, напутствуйте советом. Заранее благодарю. Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: niXman от Марта 13, 2010, 01:32 глобальные переменные, это всегда зло, за исключением момента, когда они константны. не важно, в неймспейсе они, или тупо глобальны.
сугубо мое мнение: никогда не возникало надобности, использовать НЕконстантные глобальные переменные. скорее ошибка проектирования. возможно нужно подумать о пересмотре структуры проекта. ну, или, пример приведите, когда это действительно нужно. Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: Igors от Марта 13, 2010, 10:47 То есть, есть ли на самом деле резон городить класс, или это вопрос принципа и религии? Отчетливо видеть все использования глобальных переменных - как минимум весьма желательно, не считаю это прихотью. Объективных возражений против namespace привести не могу, но не видел чтобы кто-то так делал :)Стандартный подход - класс со static'ами Код: class MyGlobalVars { Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: sarbash от Марта 16, 2010, 14:34 Остановился на варианте с namespaces.
Не вижу причин не использовать его в данном конкретном случае. niXman, Igors, благодарю за советы. Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: SASA от Марта 17, 2010, 16:34 При использовании глобальных переменных сложно гарантировать единственность.
Ещё, разделить глобальную переменную в нескольких фйалах - гемор. Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: sarbash от Марта 18, 2010, 16:39 никакого гемора не имею.
в хедере - extern-ы. в cpp - все определения. всё шоколадно, уложено по полочкам, то есть по namespace-ам, я доволен. :) вся инициализация проходит в одном месте, всё работает как часики. В данном конкретном случае ни синглтон, ни класс со статиками не понадобился. Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: niXman от Марта 18, 2010, 16:51 Цитировать никакого гемора не имею. зря радуетесь. ибо такая привычка всегда имеет последствия. а выявить их, порой бывает невообразимо сложно.Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: sarbash от Марта 19, 2010, 11:58 Насчёт привычки - согласен.
Понравилось, как у Страуструпа написано: Код: "Не существует "единственного правильного способа" для проектирования и создания всей системы. Особенно последнее предложение. Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: niXman от Марта 19, 2010, 21:28 Цитировать Особенно последнее предложение. особенно важно читать не только то, что хочется услышать.Саттер и Александреску, и многие другие, всегда пишут про "зло глобальных переменных". просто вы этого видеть не хотите ;) Название: Re: Глобальные данные - вопрос выбора между singleton и глобальными переменными. Отправлено: sarbash от Марта 20, 2010, 10:44 Просто я считаю, что злом являются не глобальные переменные, а неправильное их употребление. В конечном счёте, тот же класс со статиками является глобальной переменной. И вообще, в любой реальной программе достаточно глобальных объектов, которые по сути те же глобальные переменные. Зло - это злоупотребление. В любом случае, без них - никак, как ни крути.
Ладно, я в общем-то понял ваше мнение, не могу сказать, что оно неправильное, т.к. я не обладаю критериями правильности в этом вопросе, однако, чувствую себя в этом вопросе свободным поступать так, как посчитаю необходимым. Для меня приведённые аргументы и мнения не бесплодны и не бесполезны, т.к. полагаю, что они исходят от людей, которые имеют ценный практический опыт, коего у меня ещё маловато для авторитетных суждений. Благодарю всех за дискуссию. P.S. Как альтернативу классам, я использовал namespaces. Так что мои "глобальные" переменные на самом деле оказываются не такими уж и глобальными. :) |