Legacy Claims Portal 🏠 Home 📘 Lernpfad 🧪 Workbook 📚 Handbuch 🧩 Patterns 🧾 Lizenzen 🔎 Archiv

Entwurfsmuster im Beispielcode

Entwurfsmuster im Beispielcode

Diese Übersicht vermerkt, welche Entwurfsmuster und Modernisierungsmuster im Beispielprojekt verwendet werden. Sie ist bewusst praxisnah: Es geht nicht nur um klassische GoF-Pattern, sondern auch um Enterprise-, DDD-, Test- und Migrationsmuster.

Kurzüberblick

MusterKategorieWichtigste StelleZweck
Ports & Adapters / Hexagonal ArchitectureArchitektur-/Integrationsmuster03_after_refactoring_modular/claim-application/src/main/java/com/seb4u/demo/claims/application/port/ClaimRepository.javaFachliche Use Cases hängen nur von Ports ab; technische Details liegen in Infrastruktur-Adaptern.
RepositoryPersistenzmuster03_after_refactoring_modular/claim-application/src/main/java/com/seb4u/demo/claims/application/port/ClaimRepository.javaDer Use Case arbeitet gegen ein fachliches Repository-Interface statt direkt gegen JPA/JDBC/Stored Procedures.
AdapterStrukturmuster03_after_refactoring_modular/claim-infrastructure/src/main/java/com/seb4u/demo/claims/infrastructure/document/FileShareDocumentStorageAdapter.javaExterne Systeme werden an fachliche Ports angepasst.
Anti-Corruption LayerIntegrations-/DDD-Muster03_after_refactoring_modular/claim-infrastructure/src/main/java/com/seb4u/demo/claims/infrastructure/fraud/FraudRiskSoapAntiCorruptionAdapter.javaLegacy-Begriffe und Fremdsystemmodelle werden in interne fachliche Modelle übersetzt.
Command ObjectUse-Case-/Application-Muster03_after_refactoring_modular/claim-application/src/main/java/com/seb4u/demo/claims/application/command/ProcessClaimDecisionCommand.javaAlle Eingaben eines Use Cases werden in einem expliziten Command gebündelt.
Command Handler / Use Case InteractorApplication-Service-Muster03_after_refactoring_modular/claim-application/src/main/java/com/seb4u/demo/claims/application/handler/ProcessClaimDecisionHandler.javaEin Handler orchestriert genau einen fachlichen Anwendungsfall.
Policy / Domain ServiceFachlogikmuster03_after_refactoring_modular/claim-domain/src/main/java/com/seb4u/demo/claims/domain/ClaimTransitionPolicy.javaRegeln, die nicht sauber in eine einzelne Entity passen, werden als Policy modelliert.
SpecificationFachlogikmuster03_after_refactoring_modular/claim-domain/src/main/java/com/seb4u/demo/claims/domain/policy/CoverageSpecification.javaEine fachliche Bedingung wird als wiederverwendbares Objekt formuliert.
State Transition / State-Machine lightVerhaltensmuster03_after_refactoring_modular/claim-domain/src/main/java/com/seb4u/demo/claims/domain/ClaimStatus.javaErlaubte Statuswechsel werden zentral modelliert und validiert.
Workflow OrchestratorApplication-/Prozessmuster03_after_refactoring_modular/claim-workflow/src/main/java/com/seb4u/demo/claims/workflow/ClaimDecisionWorkflowOrchestrator.javaMehrere Use-Case-Schritte und technische Folgeaktionen werden in einem Prozessfluss koordiniert.
Outbox PatternIntegrations-/Resilienz-Muster03_after_refactoring_modular/claim-application/src/main/java/com/seb4u/demo/claims/application/port/OutboxPort.javaEreignisse werden zuverlässig gespeichert, bevor sie asynchron veröffentlicht werden.
Idempotency PatternResilienz-/Integrationsmuster03_after_refactoring_modular/claim-application/src/main/java/com/seb4u/demo/claims/application/port/IdempotencyPort.javaWiederholte technische Aufrufe werden sicher gemacht, damit z. B. Zahlungen nicht doppelt vorbereitet werden.
Mapper / TranslatorIntegrationsmuster03_after_refactoring_modular/claim-soap-api/src/main/java/com/seb4u/demo/claims/soap/ClaimSoapCompatibilityMapper.javaLegacy- oder API-Formate werden in interne Begriffe übersetzt.
DTOAPI-/Transportmuster03_after_refactoring_modular/claim-rest-api/src/main/java/com/seb4u/demo/claims/rest/ClaimDecisionRequest.javaTransportdaten werden von Domain-Objekten getrennt.
Registry / Composition Root lightVerdrahtungsmuster03_after_refactoring_modular/claim-infrastructure/src/main/java/com/seb4u/demo/claims/infrastructure/config/AdapterRegistryV9.javaAdapter-Zuordnungen werden nachvollziehbar dokumentiert bzw. zentral gesammelt.
Test Data BuilderTestmuster03_after_refactoring_modular/claim-application/src/test/java/com/seb4u/demo/claims/application/builder/ClaimTestDataBuilder.javaTestdaten werden lesbar und variierbar aufgebaut.
Object MotherTestmuster03_after_refactoring_modular/claim-application/src/test/java/com/seb4u/demo/claims/application/fixture/ClaimObjectMother.javaHäufig verwendete Standard-Testobjekte werden über sprechende Methoden bereitgestellt.
Fake / Spy Test DoubleTestmuster03_after_refactoring_modular/claim-application/src/test/java/com/seb4u/demo/claims/application/fake/InMemoryClaimRepository.javaPorts werden im Test durch kontrollierbare Ersatzimplementierungen ersetzt.
Strangler Fig PatternModernisierungsmuster03_after_refactoring_modular/migration-tests/src/test/java/com/seb4u/demo/claims/migration/LegacyVsModularDecisionComparisonTest.javaLegacy-Funktionen werden schrittweise durch neue Module ersetzt, ohne Big-Bang-Migration.
Golden Master / Characterization TestRefactoring-Sicherheitsmuster02_refactoring_steps/02_golden_master/GoldenMasterSnapshot.javaLegacy-Verhalten wird vor dem Refactoring eingefroren und später mit der neuen Implementierung verglichen.

Details

1. Ports & Adapters / Hexagonal Architecture

Kategorie: Architektur-/Integrationsmuster

Warum im Projekt: Fachliche Use Cases hängen nur von Ports ab; technische Details liegen in Infrastruktur-Adaptern.

Hinweis: Das ist das zentrale Modernisierungsmuster des Projekts.

Vorkommen im Code:

2. Repository

Kategorie: Persistenzmuster

Warum im Projekt: Der Use Case arbeitet gegen ein fachliches Repository-Interface statt direkt gegen JPA/JDBC/Stored Procedures.

Hinweis: Hilft, Legacy-DAO- und Stored-Procedure-Abhängigkeiten aus dem Application Layer herauszuhalten.

Vorkommen im Code:

3. Adapter

Kategorie: Strukturmuster

Warum im Projekt: Externe Systeme werden an fachliche Ports angepasst.

Hinweis: Adapter kapseln SOAP, LDAP, Fileshare, Audit und andere Infrastrukturdetails.

Vorkommen im Code:

4. Anti-Corruption Layer

Kategorie: Integrations-/DDD-Muster

Warum im Projekt: Legacy-Begriffe und Fremdsystemmodelle werden in interne fachliche Modelle übersetzt.

Hinweis: Wichtig für Strangler-Migration, weil Legacy-Schnittstellen nicht direkt in den neuen Kern eindringen.

Vorkommen im Code:

5. Command Object

Kategorie: Use-Case-/Application-Muster

Warum im Projekt: Alle Eingaben eines Use Cases werden in einem expliziten Command gebündelt.

Hinweis: Ersetzt lange Parameterlisten und unklare Übergabeobjekte aus dem Legacy-Code.

Vorkommen im Code:

6. Command Handler / Use Case Interactor

Kategorie: Application-Service-Muster

Warum im Projekt: Ein Handler orchestriert genau einen fachlichen Anwendungsfall.

Hinweis: Der Handler ersetzt Teile der Monster Method durch nachvollziehbare Use-Case-Schritte.

Vorkommen im Code:

7. Policy / Domain Service

Kategorie: Fachlogikmuster

Warum im Projekt: Regeln, die nicht sauber in eine einzelne Entity passen, werden als Policy modelliert.

Hinweis: Gut geeignet für Statusübergänge, Betragsregeln und Autorisierung.

Vorkommen im Code:

8. Specification

Kategorie: Fachlogikmuster

Warum im Projekt: Eine fachliche Bedingung wird als wiederverwendbares Objekt formuliert.

Hinweis: Macht komplexe if-Bedingungen lesbarer und testbarer.

Vorkommen im Code:

9. State Transition / State-Machine light

Kategorie: Verhaltensmuster

Warum im Projekt: Erlaubte Statuswechsel werden zentral modelliert und validiert.

Hinweis: Es ist bewusst keine schwere State-Machine-Library, sondern eine einfache fachliche Übergangsregel.

Vorkommen im Code:

10. Workflow Orchestrator

Kategorie: Application-/Prozessmuster

Warum im Projekt: Mehrere Use-Case-Schritte und technische Folgeaktionen werden in einem Prozessfluss koordiniert.

Hinweis: Trennt Use-Case-Logik vom Prozessfluss und von Event-/Outbox-Aktionen.

Vorkommen im Code:

11. Outbox Pattern

Kategorie: Integrations-/Resilienz-Muster

Warum im Projekt: Ereignisse werden zuverlässig gespeichert, bevor sie asynchron veröffentlicht werden.

Hinweis: Ersetzt direkte JMS-Publizierung im Legacy-Code und reduziert Konsistenzrisiken.

Vorkommen im Code:

12. Idempotency Pattern

Kategorie: Resilienz-/Integrationsmuster

Warum im Projekt: Wiederholte technische Aufrufe werden sicher gemacht, damit z. B. Zahlungen nicht doppelt vorbereitet werden.

Hinweis: Besonders wichtig bei Payment, Retry, MQ und OpenShift-Restarts.

Vorkommen im Code:

13. Mapper / Translator

Kategorie: Integrationsmuster

Warum im Projekt: Legacy- oder API-Formate werden in interne Begriffe übersetzt.

Hinweis: Schützt die Fachlogik vor Transport- und Legacy-Schnittstellendetails.

Vorkommen im Code:

14. DTO

Kategorie: API-/Transportmuster

Warum im Projekt: Transportdaten werden von Domain-Objekten getrennt.

Hinweis: Verhindert, dass REST/SOAP-Modelle direkt zur Domain werden.

Vorkommen im Code:

15. Registry / Composition Root light

Kategorie: Verdrahtungsmuster

Warum im Projekt: Adapter-Zuordnungen werden nachvollziehbar dokumentiert bzw. zentral gesammelt.

Hinweis: Didaktische Alternative zu echter Spring/CDI-Konfiguration im Beispielprojekt.

Vorkommen im Code:

16. Test Data Builder

Kategorie: Testmuster

Warum im Projekt: Testdaten werden lesbar und variierbar aufgebaut.

Hinweis: Reduziert Setup-Rauschen in Tests.

Vorkommen im Code:

17. Object Mother

Kategorie: Testmuster

Warum im Projekt: Häufig verwendete Standard-Testobjekte werden über sprechende Methoden bereitgestellt.

Hinweis: Gut für wenige Standard-Szenarien, aber nicht für jede Variation.

Vorkommen im Code:

18. Fake / Spy Test Double

Kategorie: Testmuster

Warum im Projekt: Ports werden im Test durch kontrollierbare Ersatzimplementierungen ersetzt.

Hinweis: Passt direkt zur Ports-and-Adapters-Architektur.

Vorkommen im Code:

19. Strangler Fig Pattern

Kategorie: Modernisierungsmuster

Warum im Projekt: Legacy-Funktionen werden schrittweise durch neue Module ersetzt, ohne Big-Bang-Migration.

Hinweis: Das zentrale Migrationsprinzip des Projekts.

Vorkommen im Code:

20. Golden Master / Characterization Test

Kategorie: Refactoring-Sicherheitsmuster

Warum im Projekt: Legacy-Verhalten wird vor dem Refactoring eingefroren und später mit der neuen Implementierung verglichen.

Hinweis: Kein GoF-Entwurfsmuster, aber ein zentrales Refactoring-Muster.

Vorkommen im Code:

Abgrenzung: Muster vs. Anti-Pattern

Lesepfad

  1. Zuerst Command Object, Command Handler und Policy lesen.
  2. Danach Ports & Adapters, Repository, Adapter und Anti-Corruption Layer betrachten.
  3. Anschließend Outbox, Idempotency und Strangler Fig als Migrations- und Betriebsaspekte nachvollziehen.
  4. Zum Schluss die Testmuster Test Data Builder, Object Mother, Fake/Spy und Golden Master vergleichen.
⌂ Cockpit