Если синглтоны плохи, тогда почему сервисный контейнер хорош?

Мы все знаем, насколько плохие синглтоны , потому что они скрывают зависимости и по другим причинам .

Но во фреймворке может быть много объектов, которые нужно создать только один раз и вызвать отовсюду (регистратор, db и т. Д.).

Для решения этой проблемы у меня есть было сказано использовать так называемый «диспетчер объектов» (или контейнер служб , например, symfony), который внутренне хранит каждую ссылку на службы (регистратор и т. д.).

Но почему нет? ta Поставщик услуг так же плох, как чистый Синглтон?

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

PS. Я знаю, что, чтобы не скрывать зависимости, я должен использовать DI (как заявил Миско)

Добавить

Я бы добавил: «В наши дни синглтоны не так уж плохи», - объяснил создатель PHPUnit здесь:

DI + Singleton решает проблему:


это довольно умно, даже если это не решает всех проблем .

Есть ли хорошее приемлемое решение для доступа к этим вспомогательным объектам, кроме DI и Service Container ?

90
задан Marco Demaio 29 January 2014 в 11:25
поделиться