# Metadata-Driven Design

> An approach in which behavior such as forms, routes or plugins is generated from validated metadata instead of written case by case.

Record: `architecture:metadata-driven-design`
Kind: approach
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: contextual
Scope: runtime, configuration, framework
Canonical: https://banes-lab.com/ontology#architecture-metadata-driven-design

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Self-Describing Structures](https://banes-lab.com/records/architecture/self-describing-structures.md) and before [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md).

## Repair

- Refactored by: Extract Metadata, Add Schema, Validate Config
- Detected by: metadata/config drift
- Violated by: unvalidated metadata, hidden magic
- Measured by: metadata coverage, config error rate
- Enforced by: metadata schema tests

## Requires

- [Metadata Schema](https://banes-lab.com/records/lexicon/metadata-schema.md)
- [Validation](https://banes-lab.com/records/architecture/validation.md)

## Reinforces

- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)
- [Runtime Discovery](https://banes-lab.com/records/architecture/runtime-discovery.md)

## Enables

- [Code Generation](https://banes-lab.com/records/lexicon/code-generation.md)
- [Plugins](https://banes-lab.com/records/lexicon/plugins.md)

## Conflicts with

- [Hardcoded Behavior](https://banes-lab.com/records/lexicon/hardcoded-behavior.md)

## In tension with

- [Debuggability](https://banes-lab.com/records/lexicon/debuggability.md)

## Tensions

- [Metadata-Driven Design / Debuggability](https://banes-lab.com/records/tension/debuggability-metadata-driven-design.md)

## Severity

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

## Category

- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/records/architecture-category/metadata-self-description-declarative-systems.md)

## Reinforced by

- [Model-Driven Architecture](https://banes-lab.com/records/architecture/model-driven-architecture.md)

## Linked from

- [Definitions own what, code owns how](https://banes-lab.com/software-architecture/model/definitions-own-what.md)
- [Runtime Discovery / Dynamic Binding](https://banes-lab.com/ontology/principles/architecture-category-runtime-discovery-dynamic-binding.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/lexicon/lexicon-category-metadata-self-description-declarative-systems.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)

## Evidence in the code

- [registerPage](https://banes-lab.com/source/tree/domain/registries/page.registry.ts.md)
- [presentation/records](https://banes-lab.com/anatomy/tree/folder-presentation-records.md)
