Domain-Specific Language (DSL)
Ein Domain-Specific Language (DSL) ist eine domänenspezifische Sprache oder Notation zur präzisen Beschreibung von Fachkonzepten und Regeln. DSLs fördern Verständigung zwischen Fachexperten und Entwicklern und reduzieren Übersetzungsaufwand in Implementierungen.
Klassifikation
- KomplexitätHoch
- AuswirkungOrganisatorisch
- EntscheidungstypArchitektur
- OrganisationsreifeFortgeschritten
Technischer Kontext
Prinzipien & Ziele
Use Cases & Szenarien
Kompromisse
- Falsches Abstraktionsniveau führt zu zu grober oder zu feiner Sprache.
- Unzureichende Tool-Unterstützung macht DSLs schwer nutzbar.
- Wartungsaufwand steigt, wenn Mappings und Generatoren komplex werden.
- Beginnen Sie mit einer minimalen, klaren Kernsyntax und erweitern Sie iterativ.
- Investieren Sie in Editor-Unterstützung und aussagekräftige Fehlermeldungen.
- Definieren Sie strikte Kompatibilitätsregeln und Versionierungsstrategien.
I/O & Ressourcen
- Fachliche Konzepte, Regeln und Beispiele aus der Domäne.
- Spezifikationen zu Ausführungsumgebung und Schnittstellen.
- Ressourcen für Tooling, Tests und Schulungen.
- Formale DSL-Spezifikation (Syntax & Semantik).
- Interpreter, Generatoren oder Transformationsartefakte.
- Dokumentation und Beispielmodelle für Anwender.
Beschreibung
Ein Domain-Specific Language (DSL) ist eine spezialisierte, domänennahe Programmiersprache oder Notation zur Beschreibung von Konzepten, Regeln und Artefakten eines konkreten Fachbereichs. DSLs verbessern Kommunikation zwischen Fachexperten und Entwicklern, reduzieren Übersetzungsaufwand und ermöglichen präzisere Implementierungen. Die Definition umfasst Syntax, Semantik und Mappings zur Ausführung.
✔Vorteile
- Verbesserte Verständigung zwischen Fachexperten und Entwicklern.
- Schnellere Ableitung korrekter Implementierungen durch präzise Spezifikation.
- Automatisierungspotenzial: Generierung von Code, Tests oder Konfigurationen.
✖Limitationen
- Initialer Aufwand für Design, Syntaxdefinition und Tooling ist hoch.
- Überanpassung an spezielle Fälle kann Wiederverwendbarkeit mindern.
- Erfordert Disziplin bei Versionierung und Kompatibilität.
Trade-offs
Metriken
- Zeit bis zur ersten lauffähigen Regel
Messung der Zeit von DSL-Design bis ausführbarer Implementierung einer Regel.
- Anzahl durch DSL abgedeckter Geschäftsregeln
Prozentualer Anteil der relevanten Regeln, die in der DSL modellierbar sind.
- Wartungsaufwand pro DSL-Release
Aufwand in Personentagen für Anpassungen, Tests und Deploy der DSL-Version.
Beispiele & Implementierungen
SQL als deklarative DSL für relationale Abfragen
SQL formuliert domänenspezifische Abfragen für relationale Datenbanken und abstrahiert Implementierungsdetails.
Regex als kompakte DSL für Mustererkennung
Reguläre Ausdrücke sind eine spezialisierte Notation zur Beschreibung von Textmustern und Validierungen.
Terraform HCL als DSL für Infrastruktur
HCL ist eine deklarative DSL zur Beschreibung von Infrastrukturressourcen und deren Beziehungen.
Implementierungsschritte
Domänenanalyse: Schlüsselkonzepte, Ausdrücke und Beispiele sammeln.
Entwurf: Syntax, Semantik und grundlegende Operatoren definieren.
Prototyping: Parser/Interpreter oder Codegenerator implementieren.
Validierung: Mit Fachexperten testen und iterativ anpassen.
Produktivsetzung: Tooling integrieren, dokumentieren und versionieren.
⚠️ Technische Schulden & Engpässe
Tech Debt
- Spaghetti-Generatorcode ohne klare Abstraktionsebenen.
- Unvollständige Testabdeckung für Sprachkonstrukte.
- Fehlende Dokumentation zu Variationen und Implementierungsdetails.
Bekannte Engpässe
Beispiele für Missbrauch
- Erstellen einer DSL für ein Problem, das mit Konfiguration simpler gelöst wäre.
- Aufblähen der Sprache mit einmaligen Spezialfällen zur schnellen Lösung.
- Vertrauen auf proprietäre Generatoren ohne Ersatzplan oder Dokumentation.
Typische Fallen
- Unterschätzen des Testbedarfs für Generatoren und Interpreter.
- Fehlende Migrationstrategie bei Sprachänderungen.
- Zu enge Domänenmodelle, die spätere Erweiterungen blockieren.
Erforderliche Fähigkeiten
Drivers (Architectural Drivers)
Constraints
- • Vorhandene Infrastruktur und Laufzeitumgebung begrenzen Umsetzungsoptionen.
- • Regulatorische Vorgaben können Ausdrucksmöglichkeiten einschränken.
- • Notwendigkeit stabiler Schnittstellen bei externer DSL-Nutzung.