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

Доменный сервис работает с базой напрямую через JPA-репозиторий Spring Data. Как применить Dependency Inversion Principle, и что именно здесь «инвертируется»?

SeniorПринципы проектированияSpring Data
Коротко

Домен объявляет интерфейс-порт на своём языке (OrderRepository в доменном пакете), инфраструктура его реализует. Инвертируется не только стрелка зависимости, но и владение абстракцией: интерфейс принадлежит тому, кто его использует.

  • Критерий хорошего порта: в нём нет слов JPA, SQL, Entity
  • Spring Data-интерфейс — уже инфраструктурный, а не доменный порт
  • Цена — маппинг между доменной моделью и сущностями

А ещё Гексагональная архитектура — системное применение этой идеи

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

Подробно

Объясни обе части принципа и сделай акцент на слове «инверсия»: разворачивается не только направление зависимости, но и владение абстракцией — интерфейс OrderRepository лежит в доменном пакете, а JdbcOrderRepository в инфраструктурном его реализует. Приведи критерий качества порта: если он говорит save/findById и возвращает JPA-сущности, деталь протекла и инверсии не произошло. Заверши разграничением DIP / DI / IoC.

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

  • Что именно инвертируется.
  • Владение абстракцией и пакеты.
  • Цена подхода.

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

  • Считать, что достаточно завести интерфейс где угодно — важно, кому он принадлежит.
  • Путать DIP с DI: внедрение конкретного класса инверсии не даёт.

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

  • Где в такой схеме проходит граница транзакции?
  • Не является ли интерфейс с единственной реализацией лишней абстракцией?

Разбор темы

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

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

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

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

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