@Geekbot
Программист - фрилансер

Зачем добавлять классы в контейнер в Laravel?

Почему лучше добавлять классы контейнер и создавать их из контейнера а не через new? Ну понятно мы откидываем очевидные вещи такие как сингелтоны и прочие патерны (привязка к интерфейсу), в которых контейнер дает очевидные преимущества. Ну вот есть у меня обычный класс Helper или Services, зачем мне его биндить к контейнеру и создавать из него?
Спасибо!
  • Вопрос задан
  • 241 просмотр
Решения вопроса 3
glaphire
@glaphire Куратор тега PHP
PHP developer
У меня был похожий вопрос недавно тут. Вопрос другой, а ответ тот же) Явно надо добавлять только в случае, если нужен один и тот же экземпляр (синглтон) во всем приложении, или если тайпхинтите интерфейсы, а методу надо предоставить конкретную реализацию интерфейса. В остальных случаях контейнер может сам подставить класс, без явной привязки к контейнеру. Почему так, а не создание через new - чтобы получить гибкость dependency injection и разруливание через dependency injection container, почитайте подробнее)
Ответ написан
Комментировать
dmitriylanets
@dmitriylanets
веб-разработчик
потому что в тестах их можно перекрыть и тем самым протестировать изолированно класс
Ответ написан
Комментировать
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Почему лучше добавлять классы в контейнер и создавать их из контейнера а не через new?
Откровенно говоря, вопрос звучит аки "почему молоток лучше чем пассатижи?".

В контейнер кладут классы, прежде всего для того, что бы иметь возможность управления зависимостями. Иными словами, что бы иметь возможность подменить класс А на класс Б, при первой необходимости не затрагивая основные структуры программы, а так же для того, что бы система знала, где искать какой-либо класс, когда его запрашивают. И сделано это было отнюдь не для удобства реализации Синглтонов и т.п. Иными словами, контейнер - это часть реализации DI-механизмов, а не "синтаксический сахар".

А все прочие прелести, возникшие в результате такого подхода, например связка модели с параметром роута и т.п. - это уже побочный эффект подхода, а не его основная задача. При этом, если Вам "просто нужен какой-то класс" - никто не запрещает создавать его через new или иным другим способом.

P.S. Я понимаю, что объяснение слегка примитивное и не совсем точно отражает суть, но другого объяснения, которое бы не переросло в формат/масштаб на учной статьи, на данный момент у меня не нашлось.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽