# Verwendete Entwurfsmuster

| Pattern | Zweck | Einsatzort | Begründung |
|---|---|---|---|
| Value Object | Fachwerte validieren und unveränderlich machen | `ClaimId`, `Money` | Verhindert Primitive Obsession und ungültige Zustände. |
| Aggregate Root | Konsistenz und Statuswechsel schützen | `Claim` | Nur das Aggregate darf Entscheidungen und Events erzeugen. |
| Domain Event | Fachliche Ereignisse explizit machen | `ClaimSubmitted`, `ClaimApproved`, `ClaimRejected` | Entkoppelt Folgeaktionen vom Zustandswechsel. |
| Strategy | Freigaberegeln austauschbar halten | `ClaimApprovalPolicy`, `MaximumSettlementPolicy` | Regeln bleiben klein, testbar und konfigurierbar. |
| Composite | Mehrere Strategien als Regelkette ausführen | `CompositeClaimApprovalPolicy` | Neue Regeln können ohne God Method ergänzt werden. |
| Ports and Adapters | Core von Technik entkoppeln | `port.in`, `port.out`, alle `adapter`-Module | REST, JDBC und JMS bleiben austauschbar. |
| Repository | Persistenz hinter fachlichem Vertrag kapseln | `ClaimRepository`, `JdbcClaimRepository` | Domain und Application kennen kein SQL. |
| Application Service | Einen Use Case orchestrieren | `SubmitClaimService`, `ApproveClaimService` | Controller und Aggregate werden nicht mit Ablaufsteuerung überladen. |
| Idempotent Command | Doppelte Requests sicher behandeln | `IdempotencyStore`, `JdbcIdempotencyStore` | Retries erzeugen keinen zweiten Claim. |
| Message Envelope | Event-Metadaten stabilisieren | `DomainEventEnvelope` | Eventtyp, Aggregate-ID und Zeitpunkt sind einheitlich transportierbar. |
| Composition Root | Objektgraph zentral verdrahten | `ClaimsConfiguration` | Abhängigkeiten werden nicht verteilt oder versteckt erzeugt. |
| Transactional Decorator | Use Cases atomar ausführen | `ClaimsConfiguration`, `TransactionTemplate` | Claim, Statuswechsel und Idempotency-Key teilen eine Transaktionsgrenze. |
| Architecture Fitness Function | Architekturregeln ausführbar machen | `LayerRulesTest` | Verbotene Abhängigkeiten brechen den Build statt nur Dokumentation zu verletzen. |

Jedes Pattern ist zusätzlich direkt an der maßgeblichen Klasse kurz kommentiert.
