# Interface-Based Design

> A design rule that a module depends on interfaces, and the implementation behind each one is supplied from outside.

Record: `architecture:interface-based-design`
Kind: principle
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: recommended
Scope: class, module, service
Canonical: https://banes-lab.com/ontology#architecture-interface-based-design

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md) and before [Contract-First Design](https://banes-lab.com/records/architecture/contract-first-design.md).

## Repair

- Refactored by: Extract Interface, Inject Dependency
- Detected by: concrete constructor dependencies
- Violated by: direct dependency on implementations
- Measured by: interface-to-implementation boundary ratio
- Enforced by: dependency rules

## Requires

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

## Reinforces

- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/architecture/dependency-inversion.md)
- [Testability](https://banes-lab.com/records/architecture/testability.md)

## Enables

- [Dependency Injection](https://banes-lab.com/records/architecture/dependency-injection.md)
- [Adapter Pattern](https://banes-lab.com/records/architecture/adapter-pattern.md)

## Conflicts with

- [Concrete Coupling](https://banes-lab.com/records/architecture/concrete-coupling.md)

## In tension with

- [Interface Overuse](https://banes-lab.com/records/lexicon/interface-overuse.md)

## Tensions

- [Interface-Based Design / Interface Overuse](https://banes-lab.com/records/tension/interface-based-design-interface-overuse.md)

## Severity

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

## Category

- [Contracts / Interfaces / Compatibility](https://banes-lab.com/records/architecture-category/contracts-interfaces-compatibility.md)

## Required by

- [Composition Over Inheritance](https://banes-lab.com/records/architecture/composition-over-inheritance.md)

## Linked from

- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.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)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Structural Patterns](https://banes-lab.com/ontology/principles/architecture-category-structural-patterns.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/lexicon/lexicon-category-contracts-interfaces-compatibility.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
