L!MP (24.12.2011/21:39)Вот тут:
Это когда?
AlkatraZ, Да я в курсе всех минусов синглтонов
Использовал их (именно в прошедшем времени)
L!MP (24.12.2011/21:39)Вот тут:
Это когда?
AlkatraZ, Да я в курсе всех минусов синглтонов
Использовал их (именно в прошедшем времени)
AlkatraZ, Так не пойдёт, давай тогда как-нибудь конкретизируем: ты высказуешь минус данного шаблона - мы пытаемся его оспорить или по крайней мере минимизировать
.
L!MP (24.12.2011/21:46)Минус я высказал в 1-м посту.
AlkatraZ, Так не пойдёт, давай тогда как-нибудь конкретизируем: ты высказуешь минус данного шаблона - мы пытаемся его оспорить или по крайней мере минимизировать.
Если так и не будет примеров и партия будет выйграна "всухую", то последует логический вывод:
синглтон - зло! Не применяйте его.
Причем этот вывод я уже читал, причем много раз на весьма серьезных англоязычных программерских тусовках: Singletone are evil
Наберите в Гугле этот запрос, прочитаете много интересного ![]()
AlkatraZ (24.12.2011/21:52)Почти любую задачу можно решить нескольками методами и оценка их эффективности может быть понятием субьективным.
А именно, я почти не видел примеров из реальной жизни, когда синглтон действительно нужен и задачу нельзя решить другими, причем более эффективными методами.
L!MP (24.12.2011/22:02)Приведу простой пример.
Почти любую задачу можно решить нескольками методами и оценка их эффективности может быть понятием субьективным.
Кпримеру, запрос к приложению (или ответ от приложения).
Он может быть только один в
/**
* @package mobiCMS
* @copyright Copyright (C) 2007-2012 mobiCMS team
* @license LICENSE.txt (own license, see attached file)
* @version VERSION.txt (see attached file)
* @link http://mobicms.org
*/
class Registry extends ArrayObject
{
private static $_registry = null;
public function __construct($array = array(), $flags = parent::ARRAY_AS_PROPS)
{
parent::__construct($array, $flags);
}
public static function getInstance()
{
if (self::$_registry === null) {
self::$_registry = new Registry;
}
return self::$_registry;
}
public static function get($index)
{
$instance = self::getInstance();
if (!$instance->offsetExists($index)) {
throw new RuntimeException("No entry is registered for key '$index'");
}
return $instance->offsetGet($index);
}
public static function set($index, $value)
{
$instance = self::getInstance();
$instance->offsetSet($index, $value);
}
public function offsetExists($index)
{
return array_key_exists($index, $this);
}
}Или даже так (пример из реальной жизни, считай это было вчера):
Есть у меня ServiceLocator, именно этот шаблон я решил использовать для управления зависимостями в своем коде.
Но сам локатор я сделал через синглтон и считаю это единственно верным вариантом т.к полностью статический класс - это ещё большее зло, а использование его в качестве глобального контейнера с последующим внедреннием в классы через конструкторы или методы-сеттеры сильно раздувает их и жрёт оперативную память.
AlkatraZ, Ну так это Zend_Registry и единственное зачем там нужна инициализация обьета класса - это что-бы подцепить ArrayObject.
Я бы вовсе отказался от ArrayObject в пользу магических сеттеров и геттеров php.
L!MP (24.12.2011/22:26)Ну да, я же уже писал про это.
AlkatraZ, Ну так это Zend_Registry и единственное зачем там нужна инициализация обьета класса - это что-бы подцепить ArrayObject.
Я бы вовсе отказался от ArrayObject в пользу магических сеттеров и г
L!MP (24.12.2011/22:21)У тебя настолько громадный скрипт, что ты не знаешь, где находится нужный тебе класс?
Или даже так (пример из реальной жизни, считай это было вчера):
Есть у меня ServiceLocator, именно этот шаблон я решил использовать для управления зависимостями в своем коде.
Но сам локатор я сделал