Dependency Injection vs Service Locator принципиальное различие

259
17 января 2018, 18:15

Мне очень нравится концепция DI. Но для меня смысл DI всегда заключался в том, что все зависимости внедряются через конструктор основываясь на указанном интерфейсе:

__constructor(OneInterface $one, TwoInterface $two)

В DIC я указываю реализацию интерфейсов OneInterface и TwoInterface, и он сам подставляет все на свои места (autowiring?)

А вот SL, что-то типо ассоциативного массива, в котором есть разные сервисы под своими уникальными именами.

$service = $sl->get('someService');

Все было хорошо, пока не решил почитать документацию к Symfony, где в через DIC можно сделать вот такой хитрый финт:

$container->get('app.some.service');

И тут я почувствовал запах SL. Я слышал, как ругают ServiceLocator. Практика показала, что его есть за что ругать.

Но чем тогда DIC принципиально отличается от SL, если и там и там можно по имени обратиться к сервису? По сути, DIC это очень навороченный SL? Или я что-то где-то упустил?

READ ALSO
Как собирать sku, на php

Как собирать sku, на php

Здравствуйте, разрабатываю дрошиппинг есть json не как не понимаю как собирать массив со sku чтобы на выходе получил так:

227
Почему не работает $_COOKIE внутри кастомной функции вордпресса?

Почему не работает $_COOKIE внутри кастомной функции вордпресса?

При добавлении товара в корзину у меня записывается кука с id поста с которого был добавлен товар

252
Асинхронная отправка сообщений на PHP

Асинхронная отправка сообщений на PHP

Есть чат на WebSocketsВ нем общаются люди во время трансляции

244
YII2 Не сохраняются значения в сессии

YII2 Не сохраняются значения в сессии

Мне нужно сохранить значение в сессии после авторизацииПишу:

214