Получить доступ

Сервис получает через конструктор зависимость типа PostgresOrderRepository (конкретный класс), которую внедряет Spring. Что здесь верно?

MiddleПринципы проектирования
Коротко

DI есть, DIP нарушен: зависимость приходит снаружи (техника внедрения), но сервис зависит от конкретного класса инфраструктуры, а не от абстракции. DIP — принцип: верхний уровень зависит от абстракции, которой сам владеет. DI — техника. IoC — общая идея, DI — её частный случай.

  • Исправление: интерфейс OrderRepository в доменном пакете
  • Spring отлично внедряет и конкретные классы — DIP он не обеспечивает
  • Тестировать проще через интерфейс

А ещё Интерфейс ради интерфейса с одной реализацией — не всегда нужен

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Разведи три понятия. DIP — принцип дизайна: верхний уровень зависит от абстракции, которой сам и владеет. DI — техника: зависимость приходит снаружи, а не создаётся через new. IoC — более широкая идея «управление вызывает нас», DI — её частный случай. Внедрение конкретного PostgresOrderRepository — это DI, но домен по-прежнему зависит от детали, значит инверсии нет.

Что хотят услышать

  • Различие DIP, DI, IoC.
  • Почему внедрение конкретного класса не инверсия.

Частые ошибки

  • Считать DI и DIP синонимами.
  • Думать, что достаточно завести любой интерфейс: если он говорит save/findById и возвращает JPA-сущности, деталь всё равно протекает в домен.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Dependency injection есть, но Dependency Inversion Principle нарушен
  • ✗И DI, и DIP соблюдены — зависимость ведь внедряется извне
  • ✗DI нет, потому что нет интерфейса; DIP соблюдён
  • ✗DI и DIP — это одно и то же, поэтому нарушены оба

Что спросят дальше

  • Кому должен принадлежать интерфейс репозитория и почему?
  • Как это связано с гексагональной архитектурой?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем