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

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

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

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

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

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

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

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

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

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

Войти через центр авторизации
Похожие вопросы