Modularer Monolith und Spring Modulith
Warum ein gut geschnittener Modular Monolith oft der bessere Zwischenschritt vor Microservices ist.
Modular MonolithSpring ModulithModuleBoundaries
In dieser Datei
Warum modularer Monolith
Ein Modular Monolith hält Deployment einfach, erzwingt aber fachliche Grenzen. Für viele Modernisierungen ist er der beste Schritt zwischen Legacy-Monolith und verteilten Microservices.
Spring Modulith Idee
Module werden sichtbar, Abhängigkeiten prüfbar und Ereignisse innerhalb des Monolithen besser modelliert.
Architekturtest
ArchUnit Boundary Test
package at.aydinsude.enterprise.architecture; import com.tngtech.archunit.core.importer.ClassFileImporter; import com.tngtech.archunit.lang.syntax.ArchRuleDefinition; // Pattern: Fitness Function - Architekturregel als automatisierter Test. class ModuleBoundaryTest { void domainMustNotDependOnAdapters() { var classes = new ClassFileImporter().importPackages("at.aydinsude.enterprise"); ArchRuleDefinition.noClasses() .that().resideInAPackage("..domain..") .should().dependOnClassesThat().resideInAPackage("..adapter..") .check(classes); } }
Praxisübertragung auf das V4-Beispielprojekt
Entscheidung
Dokumentiere die getroffene Architekturentscheidung als ADR, inklusive Alternativen, Folgen und Betriebsrisiken.
Code-Nachweis
Markiere verwendete Entwurfsmuster direkt im Code und ergänze sie in docs/design-patterns.md.
Betrieb
Definiere Metrik, Alert, Runbook-Schritt und Rollback-Option für diesen Bereich.
Typische Fehlerbilder
- Framework-Feature wird eingesetzt, ohne fachliche Grenze zu verstehen.
- Technische Wiederholung wird nicht idempotent gemacht.
- Observability wird erst nach Produktionsproblem ergänzt.
- Tests prüfen nur Happy Path und keine Wiederanläufe.