Один базовый класс для всех объектов?

john.brown

просто кулибин
kirill538
если вы реализовали синглтон в самом классе, то вы там же и обеспечиваете "защиту от дураков" - невозможность употребить класс иначе, окромя как синглтон. Через реестр я слабо представляю, как вы это сделаете без нагромождения ненужных наследований/зависимостей.
 

kirill538

Новичок
john.brown
PHP:
public function getStarObj(){ if(!isset($this->_starobj)){  $this->_starobj = new StarObj(); } return $this->_starobj; }
protected $_starobj;
чем не устраивает ?
 

Ирокез

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

Опять-же, не сложно реализовать в реестре и доступ к объекту сиглтон.
 

AmdY

Пью пиво
Команда форума
kirill538
ну, это не синглтон, здесь нету гарантии, что StarObj будет инициализирован в единственном числе.
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
AmdY
Ну можно скрестить кота с ежом :)

PHP:
public function getStarObj()
{
 if(is_object($this->starObj))
  return $this->starObj;
 $this->starObj = StartObject::instance();
 return $this->starObj;
}
хотя, эт уже больше в сторону извращений тянет :)
 

kirill538

Новичок
AmdY
Если создание более 1 экземпляра starobj смерти подобно - можно его сделать и синглтоном, да. Согласитесь, это уже детали внутренней реализации фабричных методов рееста и хранимых в нем объектов. Но поскольку флейм был о способах доступа к звездным объектам, я пытался протолкнуть мысль, что бездумное использование паттерна singletone в конечном счете очень похоже на использование глобальных переменных и крайне усложняет жизнь.
 

HraKK

Мудак
Команда форума
kirill538
что бездумное использование паттерна singletone в конечном счете очень похоже на использование глобальных переменных и крайне усложняет жизнь.
Ыпыть твою на лево, да регистр и есть глобалс только в обвертке.
 

kirill538

Новичок
Ирокез
Не согласен насчет извращений :)
Пример - объект коннекта к базе. Вобщем-то он как раз должен быть синглетоном, ибо коннект нужен один а операция инстанса дорогая. Тогда все и выглядит, как Вы написали. Только смысл protected поля теряется ...

-~{}~ 16.06.08 11:17:

HraKK
ню-ню
 

джамшут

Новичок
синглетон предназначен для случаев, когда второй экземпляр может помешать работе первого.
пример - веб-сервер слушающий 80 порт. два сервера на одном порту висеть не могут, так что либо второй убьёт первый, либо сам вылетит с ошибкой.

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

HraKK

Мудак
Команда форума
джамшут
Угу, у меня например в одном приложении используется Oracle + MySQL.
Поэтому я либо использую фабрику либо иньекцию.
 

AmdY

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

p.s. вот нашёл саму статью http://wiki.agiledev.ru/doku.php?id=ooad:manage_dependencies_in_php_code , ссылку на видео даал выше
 

HraKK

Мудак
Команда форума
AmdY
Очень хорошая статья, маст рид. Я на нее всегда ссылку даю.
 

kirill538

Новичок
AmdY
Если рассматривать реестр как доступ к звездным объектам - он как бы всегда с ними связан, и избавится от этого трудно. Но поскольку связь прячется в реестре - остальные объекты от нее избавлены. И все ок. Что-то я не понимаю, что не так ...
к тому же для такого варианта регистр является вообще лишним звеном
Противоречие, по моему. Использование синглетонов в явном виде повышает связанность. Использование реестра ее уменьшает, а как там реализованы объекты реестра (синглетоны или нет) уже становится неважным. Поясните мысль, плиз.
 

HraKK

Мудак
Команда форума
Использование синглетонов в явном виде повышает связанность.
+1

Но регистр как по мне еще большее зло. Лучше иж успользовать менеджер пакетов или тулзы.
 

john.brown

просто кулибин
kirill538
в вашем коде нет никакой "защиты от дураков" - ничего не мешает в любом месте скрипта создавать стоко экземпляров StarObj, скоко захочу.

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

kirill538

Новичок
john.brown
в вашем коде нет никакой "защиты от дураков" - ничего не мешает в любом месте скрипта создавать стоко экземпляров StarObj, скоко захочу
Что значит "защита от дурака" в данном контексте ? Как можно помешать говнокодеру не использовать реестр даже при его наличии ?
 

john.brown

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

john.brown

просто кулибин
Зачем же все? Токмо те, которые должны быть в еденичном экземпляре. Такое ощушение, что вы предлагаете все классы пихать в реестр :D
 

kirill538

Новичок
Такое ощушение, что вы предлагаете все классы пихать в реестр
Да нет. Я вобщем то вообще ничего не предлагаю. Мне просто было интересно, почему Вам не нравился метод реестра для доступа к обекту. Но тема флейма себя исчерпала.
 
Сверху