Version 4 · Migration
Maven-Lab Blueprint
Ein kleines Multi-Modul-Projekt zeigt, wie Legacy-Adapter, Domain Core, moderne API und OpenShift-Manifeste sauber getrennt werden.
Projektstruktur
Die Maven-Struktur dient als Lernlabor. Sie ist bewusst klein, trennt aber die wichtigsten Verantwortlichkeiten: Domäne, Legacy-Adapter, moderne API, Migrations-Tests und OpenShift-Manifeste.
Module
| Modul | Zweck |
|---|---|
| domain-core | Fachliche Modelle, Policies, Ports. Keine WebSphere- oder OpenShift-Abhängigkeit. |
| adapter-websphere | Kapselt alte JNDI/SOAP/MQ-Zugriffe. Pattern: Adapter. |
| app-modern-api | REST/API-Schicht und Use-Case-Orchestrierung. Pattern: Facade/Application Service. |
| migration-tests | Golden Master, Contract Tests, Vergleich Legacy vs Modern. |
| openshift-manifests | Deployment, Service, Route, ConfigMap, Secret-Beispiele. |
Wichtige Code-Idee
Use Case aus dem Maven-Lab mit Pattern-Kommentaren
public final class CreateInvoiceUseCase {
private final CustomerPort customerPort; // Pattern: Ports and Adapters
private final InvoiceRepository repository; // Pattern: Repository
private final InvoicePolicy policy; // Pattern: Policy / Specification
private final DomainEventPublisher events; // Pattern: Outbox Publisher
public CreateInvoiceUseCase(CustomerPort customerPort,
InvoiceRepository repository,
InvoicePolicy policy,
DomainEventPublisher events) {
this.customerPort = customerPort;
this.repository = repository;
this.policy = policy;
this.events = events;
}
public InvoiceResult handle(CreateInvoiceCommand command) {
CustomerSnapshot customer = customerPort.load(command.customerNo());
Invoice invoice = policy.createDraft(command, customer);
repository.save(invoice);
events.publish(invoice.createdEvent());
return InvoiceResult.ok(invoice.number(), invoice.total());
}
}
Nächster großer Schritt
Empfohlen: Danach kann Version 5 das Maven-Projekt deutlich ausbauen: echte Tests, mehr Klassen, lokale Docker-Compose-Testumgebung, OpenShift-Overlays und Refactoring-Szenarien als Exercises.