Layered Architecture

Layered Entwurfsmuster

Fortlaufend gepflegte Dokumentation der Layered-Variante.

Java 21Quality GatesArchUnitOffline
8
aktueller Entwicklungsstand
7
Module
21
Java

Entwurfsmuster der Layered-Variante

Pattern Zweck Einsatzort Begründung
Fitness Function Schichten und Zyklen automatisch prüfen Architekturtestmodul verhindert schleichende Strukturverletzungen
Test Pyramid Tests passend zur Verantwortung wählen alle Module vermeidet unnötig langsame Vollsystemtests
Quality Gate Build bei relevanten Defekten stoppen Quality-Profil Qualitätskriterien werden reproduzierbar
Mutation Testing Testwirksamkeit prüfen Domain und Application überlebt ein Fehler, fehlt eine wirksame Assertion
SBOM Komponentenbestand ausgeben Aggregator Lieferkettentransparenz
Pattern Zweck Einsatzort Begründung
DTO HTTP-Vertrag isolieren REST-Modul Domain bleibt transportfrei
Thin Controller Request/Response koordinieren sechs Controller keine Fachlogik im Eingangslayer
Exception Translator stabile Problem Details REST-Fehlerbehandlung einheitliche externe Fehlersemantik
Outbox Dispatcher vorgemerkte Events ausliefern Integration-Modul kein Dual Write im Use Case
Lease konkurrierende Worker koordinieren JPA-Outbox-Store skalierbare, wiederanlaufbare Verarbeitung
Gateway Kafka und Payment Provider kapseln Integration-Modul Fremdsysteme austauschbar
Composition Root Module verdrahten Bootstrap äußere Frameworkkopplung konzentriert

Persistenzmuster

Pattern Zweck Einsatzort Begründung
Data Mapper Domain und JPA-Modell übersetzen PersistenceMappers Keine ORM-Annotationen im Fachkern
Repository Adapter Application Ports technisch implementieren *JpaAdapter Dependency Inversion bleibt erhalten
Unit of Work vollständigen Use Case atomar ausführen TransactionRunner, SpringTransactionRunner fachliche Transaktionsgrenze ohne Spring-Kopplung
Transactional Outbox Zustand und Event atomar speichern JpaOutboxEventPublisher, lay_outbox_event kein Dual-Write-Verlust
Optimistic Lock verlorene Updates erkennen Versionsspalten sichere konkurrierende Änderungen
Pessimistic Lock Mehrpositionsbestand serialisieren findAllForUpdate Überreservierung verhindern
Reconstitution Factory gespeicherten Zustand kontrolliert laden Domain restore(...) keine öffentlichen Setter

Fachmodell und Application Services

Pattern Zweck Einsatzort Begründung
Aggregate Root kontrollierte Konsistenz und Zustandsübergänge domain.order.Order Bestellpositionen und Order-Status ändern sich nur über definierte Operationen
Entity Identität und Lebenszyklus abbilden Customer, Product, StockItem, Payment, Invoice fachliche Gleichheit hängt nicht nur von Attributwerten ab
Value Object validierte unveränderliche Werte Money, Quantity, Address, IDs, Email, SKU verhindert Primitive Obsession und verteilt keine Validierung
Snapshot Value Object historische Bestell- und Rechnungsdaten erhalten Product.Snapshot, Order.Line, Invoice.Line spätere Katalogänderungen verändern abgeschlossene Vorgänge nicht
Service Layer Use Cases orchestrieren sechs Application Services einheitlicher Einstieg für REST, Messaging und Tests
Repository Speicherzugriff abstrahieren Ports.CustomerRepository bis InvoiceRepository Anwendung bleibt unabhängig von JPA und Datenbank
Strategy Zahlungsanbieter austauschbar machen Ports.PaymentGateway Providerverhalten wird hinter einem stabilen Vertrag gekapselt
Domain Event fachlich relevante Ergebnisse ausdrücken BusinessEvent entkoppelt Kernentscheidung von technischer Zustellung
Idempotent Receiver Wiederholungen sicher behandeln PlaceOrderService, ReserveInventoryService, AuthorizePaymentService Netzwerk- und Messaging-Wiederholungen erzeugen keine Duplikate
In-Memory Fake Application Services ohne Mock-Kaskaden testen InMemoryPorts realistischere Zustandsprüfung bei geringem Testaufwand
Application Exception stabile Fehlerklassifikation ApplicationException Adapter können Fehler ohne Regelduplizierung übersetzen

Modulgrundlage

Pattern Zweck Einsatzort Begründung
Layered Architecture technische Verantwortungen trennen Maven-Modulgraph verständliche Referenzarchitektur
Composition Root technische Implementierungen zusammensetzen layered-bootstrap keine Geschäftslogik im Startmodul
Fitness Function Grenzen automatisiert prüfen layered-architecture-tests verhindert schleichende Architekturverletzungen

Darstellung

Design
Text
Dichte
⌂ Cockpit