# Composition Over Inheritance

> A design rule that behavior is reused by holding and delegating to another object instead of extending its class.

Record: `architecture:composition-over-inheritance`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: recommended
Scope: class, component
Canonical: https://banes-lab.com/ontology#architecture-composition-over-inheritance

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Composability](https://banes-lab.com/records/architecture/composability.md) and before [Reusability](https://banes-lab.com/records/architecture/reusability.md).

## Repair

- Refactored by: Replace Inheritance with Delegation, Extract Strategy
- Detected by: inheritance depth, overridden behavior conflicts
- Violated by: fragile base class, inherited behavior misuse
- Measured by: inheritance depth, composition ratio
- Enforced by: inheritance depth limits, review rules

## Requires

- [Delegation](https://banes-lab.com/records/lexicon/delegation.md)
- [Interface-Based Design](https://banes-lab.com/records/architecture/interface-based-design.md)

## Reinforces

- [Low Coupling](https://banes-lab.com/records/architecture/low-coupling.md)
- [Replaceability](https://banes-lab.com/records/architecture/replaceability.md)

## Enables

- [Strategy Pattern](https://banes-lab.com/records/architecture/strategy-pattern.md)
- [Decorator Pattern](https://banes-lab.com/records/architecture/decorator-pattern.md)

## Conflicts with

- [Deep Inheritance Hierarchy](https://banes-lab.com/records/lexicon/deep-inheritance-hierarchy.md)

## In tension with

- [Simplicity for Trivial Reuse](https://banes-lab.com/records/lexicon/simplicity-for-trivial-reuse.md)

## Tensions

- [Composition Over Inheritance / Simplicity for Trivial Reuse](https://banes-lab.com/records/tension/composition-over-inheritance-simplicity-for-trivial-reuse.md)

## Severity

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

## Category

- [Core Modular Design](https://banes-lab.com/records/architecture-category/core-modular-design.md)

## Enforced by

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

## Reinforced by

- [Bridge Pattern](https://banes-lab.com/records/architecture/bridge-pattern.md)

## Linked from

- [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)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Behavioral Patterns](https://banes-lab.com/ontology/principles/architecture-category-behavioral-patterns.md)
- [Structural Patterns](https://banes-lab.com/ontology/principles/architecture-category-structural-patterns.md)
- [Core Modular Design](https://banes-lab.com/ontology/lexicon/lexicon-category-core-modular-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)
