когда non-shared сервис нужен не в клиентском коде, а какой-нибудь зависимости
А поконкретней пример можно?
Грубо говоря вот контроллеры: public function __construct(ViewRenderer $viewRenderer) { $this->viewRenderer = $viewRenderer->withController($this); } Оно у вас решается иммутабельностью, но если используется мутабельные объекты, то проблема решалась бы через non-shared сервисы
Я верно понял: "Сервисы с состоянием, но использовать их надо как без состояния" ?
Что-то вроде этого
Ок, другой пример. Есть вот такая цепочка: ReportBuilderFactory -> ReportBuilder -> Report. В случае с non-shared сервисом можно запросить ReportBuilder, на основании которого построить отчет. В противном случае надо будет запрашивать ReportBuilderFactory только для того, чтобы вызывать один метод create без параметров и получить этот билдер
Плюс, в текущем варианте придется создавать класс ReportBuilderFactory чтоб его вызывать, с non-shared сервисом можно будет просто сделать Definition для ReportBuilder
Если он ничего не делает кроме создания, то можно инжектором или фабрикой стандартной
Ну это все равно будет зависимость. Не от ReportBuilderFactory, а от обычной. А задача все-таки передавать сразу ReportBuilder
Какой смысл иметь 2 репортера, созданные одной и той же фабрикой, как разные сервисы?
Обсуждают сегодня