advanced

Dependency Inversion Principle

Заставляйте policy зависеть от stable abstractions, а не от concrete infrastructure, чтобы boundaries были replaceable и testable.

DIP: policy высокого уровня не зависит от деталей низкого; оба зависят от абстракций. Domain определяет порт `OrderRepository`; infrastructure — `PostgresOrderRepository`. Инверсия меняет направление зависимостей — core не импортирует SDK types.

Естественно сочетается с DI: абстракции у policy layer, реализации на краю.

На интервью: стрелки зависимостей до/после инверсии прямого DB import в domain.

Типовые ошибки: anemic ports 1:1 с ORM entities; абстракция в infrastructure package; interface без второй реализации ever.

Компромисс — косвенность и mapping против заменяемой infrastructure и быстрых unit tests.

Чеклист:

  • Порты принадлежат domain.
  • Infrastructure реализует порты.
  • Wiring в application root.