# Domain-Specific Language

> A design pattern that expresses a domain's rules or workflows in a small language with a defined grammar and a validator.

Record: `architecture:domain-specific-language`
Kind: pattern
Layer: [Declarative Core](https://banes-lab.com/records/layer/declarative-core.md)
Severity: contextual
Scope: domain, configuration, rules
Canonical: https://banes-lab.com/ontology#architecture-domain-specific-language

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Runtime Code Generation](https://banes-lab.com/records/architecture/runtime-code-generation.md) and before [Language-Oriented Programming](https://banes-lab.com/records/architecture/language-oriented-programming.md).

## Repair

- Refactored by: Define Grammar, Add Parser/Validator
- Detected by: stringly-typed rules without parser/schema
- Violated by: ambiguous ad-hoc mini-language
- Measured by: DSL validation coverage
- Enforced by: DSL tests, schema/grammar checks

## Requires

- [Formal Grammar/Semantics](https://banes-lab.com/records/lexicon/formal-grammar-semantics.md)

## Reinforces

- [Declarative Configuration](https://banes-lab.com/records/architecture/declarative-configuration.md)
- [Ubiquitous Language](https://banes-lab.com/records/architecture/ubiquitous-language.md)

## Enables

- [Domain Expressiveness](https://banes-lab.com/records/lexicon/domain-expressiveness.md)

## Conflicts with

- [General-Purpose Boilerplate](https://banes-lab.com/records/lexicon/general-purpose-boilerplate.md)

## In tension with

- [Tooling/Maintenance](https://banes-lab.com/records/lexicon/tooling-maintenance.md)

## Tensions

- [Domain-Specific Language (DSL) / Tooling/Maintenance](https://banes-lab.com/records/tension/domain-specific-language-dsl-tooling-maintenance.md)

## Severity

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

## Category

- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/records/architecture-category/metaprogramming-language-oriented-architecture.md)

## Linked from

- [Metadata / Self-Description / Declarative Systems](https://banes-lab.com/ontology/principles/architecture-category-metadata-self-description-declarative-systems.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/lexicon/lexicon-category-metaprogramming-language-oriented-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)
