Zum Inhalt springen
_CORE
KI & Agentensysteme Unternehmensinformationssysteme Cloud & Platform Engineering Datenplattform & Integration Sicherheit & Compliance QA, Testing & Observability IoT, Automatisierung & Robotik Mobile & Digitale Produkte Banken & Finanzen Versicherungen Öffentliche Verwaltung Verteidigung & Sicherheit Gesundheitswesen Energie & Versorgung Telko & Medien Industrie & Fertigung Logistik & E-Commerce Retail & Treueprogramme
Referenzen Technologien Blog Know-how Tools
Über uns Zusammenarbeit Karriere
CS EN DE
Lassen Sie uns sprechen

Domain-Driven Design — Modellierung komplexer Domänen

28. 10. 2016 1 Min. Lesezeit CORE SYSTEMSai
Domain-Driven Design — Modellierung komplexer Domänen

Wie teilt man einen Monolithen in Microservices auf? Nach Datenbanktabellen? Nach UI-Seiten? Falsch. Nach Geschäftsdomänen. Eric Evans’ Domain-Driven Design bietet ein Framework zur Modellierung komplexer Systeme — und Bounded Contexts sind die idealen Grenzen für Microservices.

Bounded Context

Ein Bounded Context ist eine explizite Grenze, innerhalb derer das Domänenmodell gilt. „Kunde” im CRM ist ein anderer als „Kunde” in der Rechnungsstellung. Gleiches Wort, anderer Kontext, anderes Modell. Jeder Bounded Context = ein Kandidat für einen Microservice.

Ubiquitous Language

DDD erfordert eine gemeinsame Sprache zwischen Entwicklern und Fachexperten. Wenn das Business „Bestellung” sagt, hat der Code eine Klasse Order, nicht TransactionRecord. Die Sprache des Codes = die Sprache der Domäne. Keine Übersetzungen.

Aggregates und Entities

Entity: Objekte mit Identität (Order, Customer). Lebenszyklus, Zustandsänderungen. Value Object: Objekte ohne Identität (Money, Address). Immutable. Aggregate: Ein Cluster von Objekten mit einer Wurzelentität. Transaktionsgrenze. Regel: Änderungen nur über die Aggregate Root.

public class Order { // Aggregate Root
    private OrderId id;
    private List<OrderLine> lines;
    private OrderStatus status;

    public void addLine(Product product, int quantity) {
        if (status != DRAFT) throw new IllegalStateException();
        lines.add(new OrderLine(product, quantity));
    }

    public void submit() {
        if (lines.isEmpty()) throw new IllegalStateException();
        status = SUBMITTED;
        registerEvent(new OrderSubmitted(id));
    }
}

Context Mapping

Wie kommunizieren Bounded Contexts miteinander? Shared Kernel (geteiltes Modell), Customer-Supplier (Upstream/Downstream), Anti-Corruption Layer (Übersetzung zwischen Modellen). Für Microservices typischerweise ACL — jeder Service schützt sein eigenes Modell.

DDD ist eine Investition, die sich auszahlt

DDD ist nicht für jedes Projekt — für CRUD-Anwendungen ist es Overkill. Aber für komplexe Domänenlogik und die korrekte Aufteilung von Microservices ist es unschätzbar wertvoll.

awsarchitekturaec2s3
Teilen:

CORE SYSTEMS

Wir bauen Kernsysteme und KI-Agenten, die den Betrieb am Laufen halten. 15 Jahre Erfahrung mit Enterprise-IT.

Brauchen Sie Hilfe bei der Implementierung?

Unsere Experten helfen Ihnen bei Design, Implementierung und Betrieb. Von der Architektur bis zur Produktion.

Kontaktieren Sie uns