Программирование классами

nerezus

Вселенский отказник
да кому это надо ? лишняя головная боль и понижение производительности
Пиши на ассемблере
(to other: просьба не развивать тему, что код на С быстрее асма с текущими компиляторами :) )
 

pilot911

Новичок
Автор оригинала: john.brown
triumvirat, вроде, уже объяснял:

Скоко раз я матерился на таких любителей глобалсов, когда надо было что то менять в их коде... :)
:) а если бы там присутствовала system_config::instance(), материться не пришлось бы ?
 

Lightning

Трудоголик
а смысл избавляться от глобал ? потому что так модно ?
да кому это надо ? лишняя головная боль и понижение производительности
я просто не понимаю, зачем ?
pilot911, я тебе объясню сейчас, если ты до сих пор не понимаешь, для чего нужны синглтоны.

Пример 1:
Есть класс, создание экземпляра которого жрет много ресурсов. Например класс для работы с базой данных, в конструкторе которого сразу выполняется соединение с сервером. Операция соединения с базой значительно увеличивает время выполнения скрипта. Поэтому, если при каком-либо запросе база данных не используется, то лучше вообще не устанавливать соединение. Например, если страница генерирутся - используется база, если берется из кеша - не используется база.
При твоем подходе (через глобалы), нужно создавать объект заранее, а потом работать с ним как с глобальным. Но мы заранее не знаем, понадобиться нам этот объект или нет, и поэтому либо будем создавать объект всегда, либо писать кучу кода, которая будет проверять, понадобиться ли этот объект в дальнейшем. И то и другое ведет к сильному СНИЖЕНИЮ ПРОИЗВОДИТЕЛЬНОСТИ. С чем боролись, на то и напоролись.
При использование синглтона, объект создастся при первом вызове get_instance(). Если же объект не будет нужен, то он и не создастся.

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

Теперь понятно ?!!!
 

nerezus

Вселенский отказник
pilot911, ты когда нибудь работал не с пхп?
Есть такое понятие, как потокобезопасность. А глобальные переменные не позволят расширить однопоточный до до многопоточного без переписывания.
Без них же надо порой просто добавить пару строчек(тот же ThreadPool паттерн заюзать) и наслаждаться потоками.
 

pilot911

Новичок
Автор оригинала: Lightning
pilot911, я тебе объясню сейчас, если ты до сих пор не понимаешь, для чего нужны синглтоны.

Пример 1:

Пример 2:

Теперь понятно ?!!!
с синглтоном все ясно, я с тобой согласен
по второму вопросу - я таких ошибок и с регистри могу наприводить немеряно - то есть реализация через system_config:: не избавляет от ошибок, которые будет искать вся команда


nerezus

не с пхп работал, но потоки в защиту system_config:: не очень оправданы :)


ладно, в общем, как я понял, достойных аргументов нет, в основном - веяние моды...

пока что останусь при своем мнении юзать $GLOBALS[]
 

Lightning

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

pilot911

Новичок
Автор оригинала: Lightning
И вообще, я не знаю что там некоторые за супер программы пишут, что у них из-за сиглтонов так падает производительность. У меня обычно ресурсы жрут операции работы с базой и файлами. Я именно их стараюсь оптимизировать: свести количество запросов в базу к минимуму, кешировать данные, страницы и т.д. А отказываться от синглтонов для того чтобы чуть-чуть увеличить производительность - это, имхо, паранойя какая-то.
речь не о синглтонах, а об использовании $GLOBALS как регистри и хранилище конфига :)
 

Lightning

Трудоголик
по второму вопросу - я таких ошибок и с регистри могу наприводить немеряно - то есть реализация через system_config:: не избавляет от ошибок, которые будет искать вся команда
Я не про регистри, я про синглтон.
ладно, в общем, как я понял, достойных аргументов нет, в основном - веяние моды...
Мда... Я зря потратил время на написание предыдущего поста...
Да - это веяние моды ) сейчас модно писать хороший код )))

-~{}~ 07.03.09 18:44:

речь не о синглтонах, а об использовании $GLOBALS как регистри и хранилище конфига
Вроде речь была о глобальных перменных.
 

pilot911

Новичок
Автор оригинала: Lightning
Я не про регистри, я про синглтон.

Мда... Я зря потратил время на написание предыдущего поста...
Да - это веяние моды ) сейчас модно писать хороший код )))
:) "да.. вы можете хвастать подружкам, что носите GUCCI, COVALLI .... откройте шкаф: хрен.. Китай" (с) КК

это к вопросу моды - за всем новым должен быть смысл и преимущество, а не просто новая Торговая Марка от гуру
 

Lightning

Трудоголик
за всем новым должен быть смысл и преимущество, а не просто новая Торговая Марка от гуру
Паттерны проектирования - это вовсе не что-то новое.
И за их правильным использованием огромное преимущество!
 

Netman

Новичок
Ух ты, какое обсуждение ) на сколько я знаю ООП появилось из C++, интересно, ведь есть же указания как его лучше использовать, именно от его разработчиков, стандарт так сказать.
 

HraKK

Мудак
Команда форума
Ух ты, какое обсуждение ) на сколько я знаю ООП появилось из C++, интересно, ведь есть же указания как его лучше использовать, именно от его разработчиков, стандарт так сказать.
Дирол или орбит?
 

HraKK

Мудак
Команда форума
Всмысле иногда лучше жевать чем говорить.

Lightning
С пилотом лучше не спорить. Или сам созреет или бесполезно.
 

korchasa

LIMB infected
Автор оригинала: pilot911
по второму вопросу - я таких ошибок и с регистри могу наприводить немеряно - то есть реализация через system_config:: не избавляет от ошибок, которые будет искать вся команда
Оно не избавляет, оно позволяет легко отловить, ибо есть единая точка входа.
PHP:
function setInstance($value)
{
   if('wrong_value' == $value)
     debug();
   //остальной код
}
 

pilot911

Новичок
Автор оригинала: korchasa
Оно не избавляет, оно позволяет легко отловить, ибо есть единая точка входа.
PHP:
function setInstance($value)
{
   if('wrong_value' == $value)
     debug();
   //остальной код
}
представь, что в setInstance передается массив с конфигами (php или xml)

как тут проверишь, что все опции правильные ?

ХРАКК, наскоко я понимаю, ты ООП-сектант ... остается надеяться, что опыт тебя перекует в нормального прогера
 
Сверху