# Encapsulation

> A design rule that an object's state is changed only through its own operations, which keep its invariants.

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

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Low Coupling](https://banes-lab.com/records/architecture/low-coupling.md) and before [Information Hiding](https://banes-lab.com/records/architecture/information-hiding.md).

## Repair

- Refactored by: Hide Field, Introduce Method, Restrict Visibility
- Detected by: public state, excessive setters, external invariant manipulation
- Violated by: public mutable fields, leaky getters, direct state mutation
- Measured by: public surface area, mutation exposure
- Enforced by: visibility rules, linting, API review

## Requires

- [Information Hiding](https://banes-lab.com/records/architecture/information-hiding.md)
- [Stable Interfaces](https://banes-lab.com/records/architecture/stable-interfaces.md)

## Reinforces

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

## Enables

- [Change Isolation](https://banes-lab.com/records/lexicon/change-isolation.md)
- [Invariant Protection](https://banes-lab.com/records/lexicon/invariant-protection.md)

## Conflicts with

- [Exposed Internals](https://banes-lab.com/records/lexicon/exposed-internals.md)
- [Exposed Internals](https://banes-lab.com/records/lexicon/exposed-internals.md)
- [Feature Envy](https://banes-lab.com/records/architecture/feature-envy.md)

## In tension with

- [Debuggability](https://banes-lab.com/records/lexicon/debuggability.md)
- [Introspection](https://banes-lab.com/records/architecture/introspection.md)
- [Introspection / Encapsulation](https://banes-lab.com/records/tension/encapsulation-introspection.md)

## Tensions

- [Encapsulation / Debuggability](https://banes-lab.com/records/tension/debuggability-encapsulation.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

- [Explicit Boundaries](https://banes-lab.com/records/architecture/explicit-boundaries.md)
- [Aggregate](https://banes-lab.com/records/architecture/aggregate.md)
- [Value Object](https://banes-lab.com/records/architecture/value-object.md)
- [Entity](https://banes-lab.com/records/architecture/entity.md)
- [High Cohesion](https://banes-lab.com/records/architecture/high-cohesion.md)
- [Iterator Pattern](https://banes-lab.com/records/architecture/iterator-pattern.md)
- [Factory Pattern](https://banes-lab.com/records/architecture/factory-pattern.md)
- [Facade Pattern](https://banes-lab.com/records/architecture/facade-pattern.md)
- [Proxy Pattern](https://banes-lab.com/records/architecture/proxy-pattern.md)

## Required by

- [Invariant](https://banes-lab.com/records/architecture/invariant.md)
- [Command Pattern](https://banes-lab.com/records/architecture/command-pattern.md)
- [Memento Pattern](https://banes-lab.com/records/architecture/memento-pattern.md)
- [State Isolation](https://banes-lab.com/records/architecture/state-isolation.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)
- [Separate, trade, or mitigate](https://banes-lab.com/software-architecture/principles/separate-trade-or-mitigate.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Domain Architecture](https://banes-lab.com/ontology/principles/architecture-category-domain-architecture.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)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md)
- [Behavioral Patterns](https://banes-lab.com/ontology/principles/architecture-category-behavioral-patterns.md)
- [Creational Patterns](https://banes-lab.com/ontology/principles/architecture-category-creational-patterns.md)
- [Structural Patterns](https://banes-lab.com/ontology/principles/architecture-category-structural-patterns.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md)
- [Core Modular Design](https://banes-lab.com/ontology/lexicon/lexicon-category-core-modular-design.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
