Modularer Monolith und Spring Modulith

Warum ein gut geschnittener Modular Monolith oft der bessere Zwischenschritt vor Microservices ist.

Modular MonolithSpring ModulithModuleBoundaries
Modularer Monolith und Spring Modulith
Modularer Monolith und Spring Modulith

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.
⌂ Cockpit