# Information Hiding

> A design rule that a module exposes an interface and keeps the implementation decisions behind it private.

Record: `architecture:information-hiding`
Kind: principle
Layer: [Structural Core](https://banes-lab.com/records/layer/structural-core.md)
Severity: mandatory
Scope: class, module, package
Canonical: https://banes-lab.com/ontology#architecture-information-hiding

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Encapsulation](https://banes-lab.com/records/architecture/encapsulation.md) and before [Abstraction](https://banes-lab.com/records/architecture/abstraction.md).

## Repair

- Refactored by: Introduce Facade, Hide Module, Restrict Exports
- Detected by: internal packages imported externally, exposed persistence models
- Violated by: exposing implementation details, shared internals
- Measured by: internal API exposure, dependency leakage
- Enforced by: package visibility, module export rules

## Requires

- [Encapsulation](https://banes-lab.com/records/architecture/encapsulation.md)
- [Explicit Interfaces](https://banes-lab.com/records/lexicon/explicit-interfaces.md)

## Reinforces

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

## Enables

- [Internal Refactoring](https://banes-lab.com/records/lexicon/internal-refactoring.md)

## Conflicts with

- [Leaky Abstraction](https://banes-lab.com/records/lexicon/leaky-abstraction.md)

## In tension with

- [Observability](https://banes-lab.com/records/architecture/observability.md)

## Tensions

- [Information Hiding / Observability](https://banes-lab.com/records/tension/information-hiding-observability.md)

## Severity

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

## Category

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

## Reinforced by

- [Memento Pattern](https://banes-lab.com/records/architecture/memento-pattern.md)
- [Facade Pattern](https://banes-lab.com/records/architecture/facade-pattern.md)

## Linked from

- [The direction axis](https://banes-lab.com/software-architecture/model/the-direction-axis.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [Observability / Auditability / Traceability](https://banes-lab.com/ontology/principles/architecture-category-observability-auditability-traceability.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)
