# Dependency Inversion Principle

> A design rule that high-level policy and low-level detail both depend on an abstraction owned by the policy.

Record: `architecture:dependency-inversion`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: module, component, layer
Aliases: DIP
Canonical: https://banes-lab.com/ontology#architecture-dependency-inversion

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Interface Segregation Principle (ISP)](https://banes-lab.com/records/architecture/interface-segregation.md) and before [Open/Closed Principle (OCP)](https://banes-lab.com/records/architecture/open-closed.md).

## Repair

- Refactored by: Extract Interface, Introduce Port, Inject Dependency
- Detected by: dependency direction violations
- Violated by: domain importing infrastructure
- Measured by: inward dependency ratio
- Enforced by: dependency graph rules, architecture tests

## Requires

- [Abstraction](https://banes-lab.com/records/architecture/abstraction.md)
- [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md)

## Reinforces

- [Low Coupling](https://banes-lab.com/records/architecture/low-coupling.md)
- [Clean Architecture](https://banes-lab.com/records/architecture/clean-architecture.md)

## Enables

- [Dependency Injection](https://banes-lab.com/records/architecture/dependency-injection.md)
- [Ports and Adapters](https://banes-lab.com/records/lexicon/ports-and-adapters.md)

## Conflicts with

- [Concrete Dependency](https://banes-lab.com/records/lexicon/concrete-dependency.md)

## In tension with

- [Runtime Indirection](https://banes-lab.com/records/lexicon/runtime-indirection.md)
- [Service Locator Pattern](https://banes-lab.com/records/architecture/service-locator-pattern.md)
- [Service Locator Pattern / Dependency Inversion Principle (DIP)](https://banes-lab.com/records/tension/dependency-inversion-principle-dip-service-locator-pattern.md)

## Tensions

- [Dependency Inversion Principle (DIP) / Runtime Indirection](https://banes-lab.com/records/tension/dependency-inversion-principle-dip-runtime-indirection.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [SOLID / Object-Oriented Design](https://banes-lab.com/records/architecture-category/solid-object-oriented-design.md)

## Enforced by

- [rules/eslint/closure-no-platform-product-import.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-no-platform-product-import.eslint.rule.ts.md)

## Reinforced by

- [Interface-Based Design](https://banes-lab.com/records/architecture/interface-based-design.md)
- [Testability](https://banes-lab.com/records/architecture/testability.md)
- [Replaceability](https://banes-lab.com/records/architecture/replaceability.md)
- [Inversion of Control](https://banes-lab.com/records/architecture/inversion-of-control.md)

## Required by

- [Ports and Adapters Architecture](https://banes-lab.com/records/architecture/ports-and-adapters-architecture.md)

## Linked from

- [The direction axis](https://banes-lab.com/software-architecture/model/the-direction-axis.md)
- [The structural domain](https://banes-lab.com/software-architecture/principles/the-structural-domain.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Codebase / System Architecture Styles](https://banes-lab.com/ontology/principles/architecture-category-codebase-system-architecture-styles.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/lexicon/lexicon-category-solid-object-oriented-design.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)

## Evidence in the code

- [importsDiagram](https://banes-lab.com/source/tree/domain/converters/graph.converter.ts.md)
- [core](https://banes-lab.com/anatomy/tree/folder-core.md)
- [domain](https://banes-lab.com/anatomy/tree/folder-domain.md)
