# Value Object

> A design pattern that models a domain value as an immutable, self-validating object compared by its attributes.

Record: `architecture:value-object`
Kind: pattern
Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)
Severity: recommended
Scope: domain, modeling, immutability
Canonical: https://banes-lab.com/ontology#architecture-value-object

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Aggregate](https://banes-lab.com/records/architecture/aggregate.md) and before [Entity](https://banes-lab.com/records/architecture/entity.md).

## Repair

- Refactored by: Introduce Value Object
- Detected by: repeated validation of the same primitive shape
- Violated by: domain concepts carried as bare primitives
- Measured by: primitive-typed domain concept count
- Enforced by: domain model review

## Requires

- [Value Equality](https://banes-lab.com/records/lexicon/value-equality.md)

## Reinforces

- [Immutability](https://banes-lab.com/records/architecture/immutability.md)
- [Encapsulation](https://banes-lab.com/records/architecture/encapsulation.md)

## Enables

- [Self-Validating Values](https://banes-lab.com/records/lexicon/self-validating-values.md)
- [Side-Effect-Free Equality](https://banes-lab.com/records/lexicon/side-effect-free-equality.md)

## Conflicts with

- [Primitive Obsession](https://banes-lab.com/records/architecture/primitive-obsession.md)
- [Data Clumps](https://banes-lab.com/records/architecture/data-clumps.md)
- [Long Parameter List](https://banes-lab.com/records/architecture/long-parameter-list.md)

## In tension with

- [Object Count](https://banes-lab.com/records/lexicon/object-count.md)
- [Entity](https://banes-lab.com/records/architecture/entity.md)
- [Entity / Value Object](https://banes-lab.com/records/tension/entity-value-object.md)

## Tensions

- [Value Object / Object Count](https://banes-lab.com/records/tension/object-count-value-object.md)

## Severity

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

## Category

- [Domain Architecture](https://banes-lab.com/records/architecture-category/domain-architecture.md)

## Linked from

- [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)
- [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)
- [Domain Architecture](https://banes-lab.com/ontology/lexicon/lexicon-category-domain-architecture.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
