Entwurfsmuster in den Referenzprojekten
Jedes Muster wird im Code markiert und mit Zweck, Einsatzort und Begründung dokumentiert. Nutze die Seite für eine konkrete Engineering-Aufgabe: Kläre zuerst Ziel und Risiko und halte danach Ergebnis, Nachweis und nächsten Schritt fest.
Transactional Outbox
Zweck: Lokale Zustandsänderung und Event atomar speichern.
Einsatzort: PlaceOrderHandler, OutboxRepository, OutboxRelay
Begründung: Schließt die Dual-Write-Lücke zwischen Datenbank und Broker.
Idempotent Consumer
Zweck: Doppelte Nachrichtenzustellung ohne doppelte Wirkung verarbeiten.
Einsatzort: ProcessedMessageStore, OrderProjectionConsumer
Begründung: Macht At-least-once-Zustellung fachlich sicher.
Outbox Relay
Zweck: Outbox-Einträge getrennt und wiederholbar publizieren.
Einsatzort: OutboxRelay, MessagePublisher
Begründung: Entkoppelt Transportfehler vom Use Case.
Strategy
Zweck: Austauschbare fachliche Preisberechnung oder Serialisierung.
Einsatzort: PricingPolicy, EventSerializer
Begründung: Varianten bleiben testbar und unabhängig.
Repository
Zweck: Domänennaher Persistenzvertrag.
Einsatzort: OrderRepository, OutboxRepository
Begründung: Domäne und Application bleiben unabhängig von Infrastruktur.
Adapter
Zweck: Technische Implementierung eines Ports.
Einsatzort: InMemory-Repositories, Publisher und Serializer
Begründung: Technik kann ersetzt und separat geprüft werden.
Application Service
Zweck: Orchestrierung eines Use Cases.
Einsatzort: CreateOrderService, PlaceOrderHandler
Begründung: Regeln und Ablauf bleiben getrennt.
Domain Event
Zweck: Unveränderliche fachliche Aussage.
Einsatzort: OrderPlaced, OrderCancelled
Begründung: Nachgelagerte Reaktionen werden entkoppelt.
Composition Root
Zweck: Zentrale Verdrahtung konkreter Adapter.
Einsatzort: WorkbenchDemo, EventDrivenDemo
Begründung: Objektkonstruktion bleibt außerhalb der Fachmodule.
Spring Kafka Order Flow
| Pattern | Zweck | Einsatzort | Begründung |
|---|---|---|---|
| Transactional Outbox | Dual Write vermeiden | JdbcOutboxAdapter | Geschäftsdaten und Event committen atomar. |
| Polling Publisher | Outbox ausliefern | OutboxRelay | Brokerfehler bleiben außerhalb der Fachtransaktion. |
| Idempotent Consumer | Duplikate neutralisieren | OrderProjectionListener | At-least-once erzeugt nur eine Fachwirkung. |
| Tolerant Reader | V1/V2 lesen | EventEnvelopeJsonCodec | Additive Evolution bleibt kompatibel. |
| Retry + Dead Letter | Fehler klassifizieren | KafkaErrorHandlingConfiguration | Temporäre und dauerhafte Fehler werden getrennt. |