Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.
- Aktualisiert:
- Autor:
- Roland Golla
Domain Driven Design: Definition und Einordnung
Inhalt
Domain Driven Design mit NCA: Schnelle Hilfe vom Experten
Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.
Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.
Die Bausteine von Domain Driven Design
- Ubiquitous Language: die gemeinsame Sprache von Fachbereich und Entwicklung. Steht ein Begriff im Fachgespräch, steht er auch als Klasse oder Methode im Code.
- Bounded Context: eine klare Grenze, innerhalb derer ein Modell gilt. Ein Kunde im Vertrieb ist etwas anderes als ein Kunde in der Buchhaltung.
- Aggregate: eine Gruppe von Objekten, die zusammen konsistent bleiben muss. Der Zugriff läuft immer über die Aggregate Root.
- Entity: ein Objekt mit eigener Identität über die Zeit, zum Beispiel eine Bestellung mit fester Nummer.
- Value Object: ein Objekt ohne Identität, das nur über seine Werte definiert ist, zum Beispiel ein Geldbetrag oder eine Mailadresse.
- Repository: der Zugang zu gespeicherten Aggregaten, fachlich formuliert statt als Datenbankabfrage.
- Domain Event: eine fachliche Tatsache, die passiert ist. Sie wird veröffentlicht und von anderen Bereichen verarbeitet.
Strategisches und taktisches Design im Überblick
| Ebene | Bausteine | Frage dahinter |
|---|---|---|
| Strategisch | Ubiquitous Language, Bounded Context, Context Mapping | Wo verläuft die Grenze zwischen zwei Fachbereichen? |
| Taktisch | Entity, Value Object, Aggregate, Repository | Wie sieht das Modell im Code aus? |
| Integration | Domain Events, Anti Corruption Layer, Published Language | Wie sprechen zwei Kontexte miteinander? |
| Absicherung | Deptrac, PHP Arkitect, PHPUnit, Cypress | Wie bleibt die Grenze im Alltag bestehen? |
Domain Driven Design in PHP und Symfony
final readonly class Geldbetrag
{
public function __construct(
private int $cent,
private Waehrung $waehrung,
) {
if ($cent < 0) {
throw new NegativerBetrag();
}
}
public function plus(self $andere): self
{
if ($this->waehrung !== $andere->waehrung) {
throw new WaehrungPasstNicht();
}
return new self($this->cent + $andere->cent, $this->waehrung);
}
}
deptrac:
layers:
- name: Domain
collectors:
- type: directory
value: src/Domain/.*
- name: Infrastructure
collectors:
- type: directory
value: src/Infrastructure/.*
ruleset:
Domain: ~
Infrastructure:
- Domain
Domain Driven Design und KI Agents 2026
- Die Ubiquitous Language ist der beste Teil jeder Agent Anweisung. Wer seine Begriffe sauber definiert hat, schreibt bessere Prompts, ohne es zu merken.
- Ein Bounded Context ist eine natürliche Arbeitsgrenze für einen Agenten. Der Auftrag lautet dann nicht ändere das System, sondern ändere diesen Bereich.
- Architekturtests fangen ab, was der Agent falsch verbindet. Ohne diese Guardrails wandert Infrastrukturcode früher oder später in die Domäne.
Wann sich Domain Driven Design lohnt und wann nicht
The heart of software is its ability to solve domain-related problems for its user.
Die NCA Erfahrung mit fachlich getriebener Architektur
Erreichen Sie unsere PHP Consultant Spezialisten
Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.
Häufige Fragen zu Domain Driven Design
Was ist Domain Driven Design 2026 kurz erklärt?
Domain Driven Design ist ein Ansatz, bei dem die Fachlichkeit die Struktur der Software bestimmt. Entwickler und Fachexperten einigen sich auf eine gemeinsame Sprache, schneiden das System in fachliche Bereiche mit klaren Grenzen und bilden diese Bereiche im Code ab. Der Ansatz stammt von Eric Evans aus dem Jahr 2003 und ist bis heute der Standard für komplexe Geschäftslogik.
Lohnt sich Domain Driven Design 2026 trotz KI gestützter Entwicklung?
Ja, und zwar mehr als vorher. Ein Coding Agent produziert schnell viel Code. Ohne klare fachliche Grenzen wächst dieser Code in alle Richtungen. Domain Driven Design liefert die Begriffe und die Grenzen, an denen ein Agent arbeiten kann, ohne das ganze System zu berühren. Die Modellierung selbst bleibt Arbeit für Menschen.
Welche Rolle spielt Domain Driven Design 2026 für KI Agents?
Ein Bounded Context ist eine natürliche Arbeitsgrenze für einen Agenten. Er passt ins Kontextfenster, hat eindeutige Begriffe und eigene Tests. Die Ubiquitous Language wird zur Grundlage der Anweisungen, weil sie jeden Begriff nur einmal definiert. Architekturtests fangen ab, wenn der Agent Infrastruktur in die Domäne zieht.
Wie startet ein PHP Team 2026 mit Domain Driven Design?
Nicht mit Aggregaten, sondern mit Sprache. Schreibt die zentralen Begriffe eures Geschäfts auf und klärt, wo dasselbe Wort zwei Bedeutungen hat. Daraus ergeben sich die Grenzen fast von selbst. Danach folgt ein kleiner Bereich als Pilot, abgesichert mit Tests, bevor die Muster auf den Rest übertragen werden.
Welche Tools helfen 2026 bei Domain Driven Design in PHP?
Deptrac und PHP Arkitect prüfen Schichtgrenzen als Test in der Pipeline. PHPStan und Psalm sichern Typen ab, PHPUnit deckt die Domänenlogik ab, Rector hilft bei mechanischen Umbauten. DePHPend und PDepend machen gewachsene Abhängigkeiten sichtbar. Für die Oberfläche prüft Cypress, ob die fachlichen Abläufe weiter funktionieren.
Was unterscheidet strategisches von taktischem Design?
Strategisches Design beantwortet die Frage nach den Grenzen: Welche fachlichen Bereiche gibt es, wie hängen sie zusammen, welche Sprache gilt wo. Taktisches Design liefert die Bausteine im Code, also Entities, Value Objects, Aggregate und Repositories. Wer nur taktisch arbeitet, bekommt saubere Klassen in einem falsch geschnittenen System.
Was ist der Unterschied zwischen Entity und Value Object?
Eine Entity hat eine Identität, die über die Zeit bestehen bleibt. Eine Bestellung bleibt dieselbe Bestellung, auch wenn sich ihr Status ändert. Ein Value Object hat keine Identität und wird nur über seine Werte bestimmt, zum Beispiel ein Geldbetrag oder eine Adresse. Value Objects sind unveränderlich und lassen sich gefahrlos kopieren.
Braucht Domain Driven Design zwingend Microservices?
Nein. Bounded Contexts sind fachliche Grenzen, keine Deployment Grenzen. Ein modularer Monolith mit sauber getrennten Bereichen ist für die meisten Teams die bessere Wahl und deutlich einfacher zu betreiben. Wenn ein Bereich später eigene Skalierung braucht, lässt er sich entlang der bestehenden Grenze herauslösen.
Passt Domain Driven Design zu Doctrine und Symfony?
Ja. Die Domäne liegt in einem eigenen Verzeichnis ohne Framework Abhängigkeiten, Doctrine bleibt Infrastruktur. Mit XML Mapping statt Attributen bleibt die Domänenklasse frei von ORM Details. Repositories werden als Interface in der Domäne beschrieben und in der Infrastruktur implementiert. Symfony liefert dafür alles Nötige mit.
Wie hängen Domain Driven Design und Event Sourcing zusammen?
Event Sourcing speichert nicht den aktuellen Zustand, sondern alle fachlichen Ereignisse. Das passt gut zu Domain Driven Design, weil Domain Events dort ohnehin vorkommen. Zwingend ist es nicht. Event Sourcing erhöht den Aufwand deutlich und lohnt sich vor allem, wenn die Historie selbst fachlich wertvoll ist, etwa bei Abrechnung oder Revision.
Wie bekommt man den Fachbereich an den Tisch?
Mit konkreten Fragen statt Methodendiskussion. Ein Workshop, in dem gemeinsam ein echter Ablauf auf Karten gelegt wird, bringt mehr als jede Einführung in Aggregate. Fachleute merken schnell, dass ihre Begriffe im System falsch verwendet werden. Dieser Moment erzeugt die Bereitschaft, dauerhaft mitzuarbeiten.
Was kostet die Einführung von Domain Driven Design?
Das hängt vom Zustand des Systems ab. Ohne Tests und Pipeline geht ein großer Teil des Aufwands in die Absicherung, bevor überhaupt modelliert wird. Bei NCA beginnt jede Zusammenarbeit mit einem kostenlosen Kennenlernen, danach schätzen wir den Aufwand ehrlich ein und rechnen transparent minutengenau ab. Feste Pakete gibt es bewusst nicht.