# Domain Model

Record: `arch:domain-model`
Kind: artifact
Layer: [Domain Modeling](https://banes-lab.com/records/layer/domain-modeling.md)
Severity: contextual
Scope: domain, bounded context
Canonical: https://banes-lab.com/ontology#arch-domain-model

## Repair

- Refactored by: Move Logic to Domain, Add Value Object, Add Aggregate
- Detected by: procedural domain logic in services/controllers
- Violated by: business rules outside domain objects/services
- Measured by: rule locality, invariant coverage
- Enforced by: domain layer rules, [tests](https://banes-lab.com/records/lex/tests.md)

## requires

- [Ubiquitous Language](https://banes-lab.com/records/arch/ubiquitous-language.md)
- [Invariants](https://banes-lab.com/records/arch/invariants.md)

## reinforces

- [Correctness](https://banes-lab.com/records/arch/correctness.md)
- [Semantic Contracts](https://banes-lab.com/records/arch/semantic-contracts.md)

## enables

- [Business Rule Encapsulation](https://banes-lab.com/records/lex/business-rule-encapsulation.md)

## conflicts-with

- [Anemic Model](https://banes-lab.com/records/lex/anemic-model.md)

## tensions-with

- [Persistence Simplicity](https://banes-lab.com/records/lex/persistence-simplicity.md)

## tensions

- [Domain Model Persistence Simplicity](https://banes-lab.com/records/tension/domain-model-persistence-simplicity.md)

## referenced-by

- [Semantic Contracts](https://banes-lab.com/records/arch/semantic-contracts.md)
- [Domain-Driven Design (DDD)](https://banes-lab.com/records/arch/domain-driven-design.md)
- [Entity](https://banes-lab.com/records/arch/entity.md)
- [Domain Service](https://banes-lab.com/records/arch/domain-service.md)
- [Domain Events](https://banes-lab.com/records/arch/domain-events.md)
