Master 2

Design Patterns

Modernes Maven-Multi-Module-Enterprise-Projekt mit Markdown, HTML, PDF und Pattern-Dokumentation.

Entwurfsmuster im Maven Master 2

Aggregate Root

Zweck: Konsistenzgrenze fuer Bestellungen

Einsatzort: order-domain/Order.java

Begruendung: Zentralisiert Invarianten und Events

Value Object

Zweck: Unveraenderliche Fachwerte

Einsatzort: shared-kernel/Money.java, order-domain/OrderLine.java

Begruendung: Verhindert Primitive Obsession

Repository

Zweck: Persistenz-Port im Domain-Modell

Einsatzort: order-domain/OrderRepository.java

Begruendung: Domain bleibt DB-neutral

Factory Method

Zweck: Kontrollierte Aggregate-Erzeugung

Einsatzort: Order.start(), OrderId.newId()

Begruendung: Keine ungueltigen Startzustaende

Domain Event

Zweck: Fachliche Ereignisse explizit machen

Einsatzort: OrderPlaced.java

Begruendung: Entkopplung von Folgeprozessen

Specification

Zweck: Regeln kombinierbar ausdruecken

Einsatzort: OrderSpecification.java

Begruendung: Testbare Fachbedingungen

Strategy

Zweck: Preislogik austauschbar machen

Einsatzort: PricingStrategy.java

Begruendung: Varianten ohne if-Kaskaden

Policy

Zweck: Fachentscheidung kapseln

Einsatzort: CustomerCreditPolicy, InventoryReservationPolicy

Begruendung: Regeln bleiben eigenstaendig

Application Service

Zweck: Use Case orchestrieren

Einsatzort: PlaceOrderService.java

Begruendung: Keine Framework-Logik in Domain

Command

Zweck: Benutzerabsicht transportieren

Einsatzort: PlaceOrderCommand.java

Begruendung: Eingabe bleibt explizit und testbar

CQRS

Zweck: Lesen und Schreiben trennen

Einsatzort: OrderQueryService.java

Begruendung: Read Model darf optimiert sein

Adapter

Zweck: Technologie an Ports anschliessen

Einsatzort: REST, JPA, Kafka, Legacy

Begruendung: Austauschbarkeit

Facade

Zweck: Einheitliche REST-Fehler

Einsatzort: RestExceptionMapper.java

Begruendung: API bleibt konsistent

Data Mapper

Zweck: Entity von Domain trennen

Einsatzort: OrderEntity.java

Begruendung: JPA leakt nicht in Aggregate

Unit of Work

Zweck: Transaktionsgrenze kapseln

Einsatzort: TransactionBoundary.java

Begruendung: Application bleibt Framework-neutral

Transactional Outbox

Zweck: Dual-Writes vermeiden

Einsatzort: OutboxRecord.java

Begruendung: Event und Fachzustand in einer TX

Saga

Zweck: Verteilte Prozesse koordinieren

Einsatzort: PaymentSaga.java

Begruendung: Keine globale XA-Transaktion

Anti-Corruption Layer

Zweck: Legacy entkoppeln

Einsatzort: LegacyOrderGateway.java

Begruendung: Alte Modelle kontaminieren Domain nicht

Gateway

Zweck: Externes System kapseln

Einsatzort: LegacySoapClient.java

Begruendung: Technischer Zugriff bleibt schmal

Idempotent Consumer

Zweck: Retry-sicher verarbeiten

Einsatzort: IdempotentConsumerGuard.java

Begruendung: Doppelte Messages werden unschaedlich

Composition Root

Zweck: Verdrahtung zentralisieren

Einsatzort: EnterpriseSpringApplication, Quarkus Wiring

Begruendung: Domain baut keine Infrastruktur

Fitness Function

Zweck: Architektur pruefbar machen

Einsatzort: LayerRulesTest.java

Begruendung: Regeln werden Build-Bestandteil

Stand 2026-07-07. Relative Links und Codebloeke geprueft.

⌂ Cockpit