Мы все знаем, как bad Singletons связаны с тем, что они скрывают зависимости и другие причины.
Но в рамках может быть много объектов, которые должны быть созданы только один раз и называются от везде (logger, db и т.д.).
Чтобы решить эту проблему, мне сказали использовать так называемый "Диспетчер объектов" (или Service Container, например symfony), который внутренне хранит все ссылка на Службы (регистратор и т.д.).
Но почему провайдер услуг не так плох, как чистый Синглтон?
Поставщик услуг также скрывает зависимости, и они просто завершают создание первого события. Поэтому я действительно пытаюсь понять, почему мы должны использовать поставщика услуг вместо одиночных.
PS. Я знаю, что чтобы не скрывать зависимости, я должен использовать DI (как указано Misko)
Добавить
Я бы добавил: в наши дни синглтоны не так злы, создатель PHPUnit объяснил это здесь:
DI + Singleton решает проблему:
<?php
class Client {
public function doSomething(Singleton $singleton = NULL){
if ($singleton === NULL) {
$singleton = Singleton::getInstance();
}
// ...
}
}
?>
который довольно умный, даже если это не решает никаких проблем.
За исключением DI и Service Container есть ли приемлемое решение для доступа к этим вспомогательным объектам?