Code und Architektur

Entwurfsmuster im Maven-Projekt V6

Die Muster sind in den vorhandenen Java-Klassen kurz kommentiert. Diese Dokumentation ergänzt Zweck, Einsatzort, Begründung und Grenzen.

PatternZweckEinsatzortBegründungGrenzen
Aggregate RootSchützt fachliche Invarianten und bündelt Zustandsänderungen.order-domain/Order.javaBestellungen können nur mit Positionen platziert werden; nach dem Platzieren sind keine neuen Positionen zulässig.Das Beispiel modelliert nur wenige Regeln und keine Persistenz- oder Nebenläufigkeitskonflikte.
Value ObjectRepräsentiert einen unveränderbaren fachlichen Wert.shared-kernel/TrainingEvent.javaEvent-ID, Typ und Zeitpunkt werden als unveränderbares Record transportiert.Der Name TrainingEvent ist generisch; produktiv wären domänenspezifische Eventtypen sinnvoll.
Hexagonal ArchitectureTrennt Use Case und Domain von technischen Adaptern.order-application/PlaceOrderUseCase.javaDer Use Case kennt nur Repository- und Publisher-Ports.Die Maven-POMs bilden die beabsichtigte Abhängigkeitsrichtung derzeit nicht ab.
Command HandlerKapselt die Verarbeitung eines Schreibbefehls.PlaceOrderUseCase.handleDer Place-Order-Befehl hat einen klaren Einstieg und Rückgabewert.Validierung, Autorisierung, Transaktion und Fehlerabbildung sind nicht ausgearbeitet.
OutboxEntkoppelt fachliche Speicherung und spätere Ereignisveröffentlichung.order-adapter-events/OutboxPublisher.javaDer Adapter markiert die Stelle für zuverlässige Veröffentlichung.Aktuell nur In-Memory-Set; keine Datenbank-Outbox, keine Transaktion und kein Broker.
Idempotent ConsumerVerhindert doppelte Verarbeitung derselben Event-ID.OutboxPublisherBereits veröffentlichte UUIDs werden erkannt.Der Speicher ist pro Prozess flüchtig und nicht clusterfähig.
FacadeVereinfacht den Zugriff auf eine komplexe oder alte Schnittstelle.legacy-soap-adapter/LegacySoapFacade.javaDer Aufrufer sieht nur eine einfache Kreditprüfungsoperation.Kein realer SOAP-Client, keine Fehler-/Timeout-/Mapping-Strategie.
Anti-Corruption LayerIsoliert Begriffe und Datenmodelle eines Altsystems.LegacySoapFacadeLegacy-Kundennummern werden in ein neutrales Ergebnisobjekt übersetzt.Die Mapping-Logik ist stark vereinfacht.
SpecificationFormuliert Regeln explizit und wiederverwendbar.architecture-tests/ArchitectureRuleCatalog.javaArchitekturregeln werden als lesbarer Katalog zentralisiert.Keine ausführbare ArchUnit-Spezifikation; Regeln werden derzeit nicht automatisch erzwungen.
Context ObjectTransportiert technische Kontextdaten gebündelt.observability/TraceContext.javaTrace-ID bleibt explizit und wird nicht in die Fachlogik versteckt.Kein Propagation-, MDC-, OpenTelemetry- oder Thread-Kontext-Mechanismus.
Statushinweis: Ein Pattern gilt nur dann als implementiert, wenn eine konkrete Java-Klasse vorhanden ist. Reine POM-/Strukturmodule werden in der Maven-Projektübersicht als Zielbild gekennzeichnet.
⌂ Cockpit