Принцип DIP из SOLID и Autowiring из DI-контейнеров?

Принцип DIP гласит: зависимости должны быть на абстракциях, а не от конкретной реализации.

Например такой код:
public function __construct(LoggerInterface $logger) { }

Зависимость от интерфейса.

При использовании DI-контейнеров с autowiring - работать не будет. Для работы автовайринга нужно, чтобы был указан конкретный класс в зависимости.

Объясните пожалуйста, что я не так понял? Или почему вижу противоречие в принципе DIP и инструмента для упрощения работы с зависимостями?
  • Вопрос задан
  • 782 просмотра
Решения вопроса 2
syamskoy
@syamskoy
Dependency injection - это когда в класс A мы передаем класс B через конструктор или сеттер, что бы он с ним работал, а не создавал его в своих нутрях.
Dependency Inversion - это когда мы в классе A работаем не с конкретной реализацией, а с интерфейсами: указываем интерфейсы в конструкторе, в методах, в возвращаемых типах и т.д.
Это два разных понятия, которые иногда объединяют в одно, и иногда их путают.
Так вот, autowiring - это про Dependency injection, а D в solid - это про Dependency Inversion. Одно другому не мешает и не нарушает.
Ответ написан
myks92
@myks92 Куратор тега PHP
Нашёл решение — пометь вопрос ответом!
Как это не будет? Может быть вы не правильно используете или не знаете как использовать?

В DI контейнере мы «привязываем» класс, который реализует интерфейс. Таким образом везде, где есть этот интерфейс будет работать созданный и «привязанный» нами класс.

Вроде бы там достаточно просто и понятно.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
У Вас 2 варианта:
1. Пытаетесь исправить чьи-то ошибки.
2. Думаете своей головой.

Я выбрал - 2-й.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы