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.