Skip to content

Modul 3: Architectural Styles — vom Layered zu Microservices

Architekturstile im Vergleich: Layered, Hexagonal, Clean Architecture, Event-Driven, Microservices. Welche Struktur wofür?

Fortschritt0/5 Lektionen
11

Architectural Styles — vom Layered zu Microservices

Lektion 11 von 5

Architekturstile

Ein Architekturstil definiert die grobe Struktur eines Systems: Welche Bausteine gibt es, wie hängen sie zusammen, und welche Abhängigkeitsrichtung gilt. Kein Stil ist "richtig" — jeder tauscht Komplexität an einer Stelle gegen Vereinfachung an einer anderen. Die Wahl hängt von Teamgröße, Domänenkomplexität und Skalierungsanforderungen ab.

Lesson 1: Layered Architecture

Der Klassiker: Schichten übereinander (Presentation, Business, Persistence, Database), Abhängigkeiten zeigen nur nach unten. Vorteil: intuitiv und durchdacht für CRUD-Anwendungen. Nachteil: Business-Logik verwassert oft, und die Datenbank ist das Zentrum statt der Domäne. Für viele Anwendungen trotzdem der pragmatische Start.

Lesson 2: Hexagonal Architecture (Ports & Adapters)

Die Domäne sitzt im Zentrum und kennt keine Infrastruktur. Die Außenwelt erreicht sie über Ports (Interfaces) und Adapters (Implementierungen) — HTTP-Controller, DB-Repositories, Message-Listener sind alles nur Adapter. Vorteil: Die Domäne ist testbar ohne Datenbank und Webserver, und Infrastruktur ist austauschbar. Ideal, wenn die Business-Logik komplex ist.

src/main/java/com/example/cropguard/
  domain/                    # Kern — kennt keine Infrastruktur
    policy/Policy.java       # Entity + Geschäftsregeln
    policy/PolicyRepository.java  # Port (nur Interface)
  adapter/
    in/http/PolicyController.java   # Driving Adapter (REST)
    out/jpa/JpaPolicyRepository.java # Driven Adapter (DB)

Pfeilrichtung beachten: Abhängigkeiten zeigen immer von außen nach innen.

Lesson 3: Clean Architecture

Clean Architecture (Robert C. Martin) verallgemeinert Hexagonal: Konzentrische Kreise mit der Abhängigkeitsregel "alles zeigt nach innen". Entities und Use Cases im Kern, Frameworks und Treiber außen. Der Punkt ist nicht die Anzahl der Kreise, sondern die Richtung: Die Domäne definiert Interfaces, die Infrastruktur implementiert sie (DIP auf Systemebene).

Lesson 4: Event-Driven Architecture

Services kommunizieren über Ereignisse statt direkter Aufrufe: Ein Service publiziert "OrderCreated", andere reagieren (E-Mail, Lager, Statistik). Vorteil: Lose Kopplung, gute Skalierbarkeit, einfache Erweiterung. Nachteile: Eventuelle Konsistenz (kein sofortiger Zustand), schwereres Debugging, Event-Schema-Evolution. Braucht einen Broker (Kafka, RabbitMQ) und Monitoring.

Lesson 5: Microservices — und wann sie (nicht) passen

Microservices zerlegen ein System in unabhängig deploybare Services mit eigener Datenbank. Vorteile: unabhängige Teams und Deployments, skalieren pro Service. Kosten: Netzwerk-Fehlerbehandlung, verteilte Transaktionen (Saga), Betrieb (Container, Service Mesh), Datenkonsistenz. Faustregel: Erst mit dem Monolithen erfolgreich sein — Microservices lösen Organisationsprobleme (viele Teams), keine technischen.

Kein Stil ist besser — jeder tauscht Komplexität

Layered ist einfach zu verstehen, aber die Domäne verkummert. Hexagonal/Clean testen die Domäne isoliert, kosten aber mehr Abstraktion. Event-Driven entkoppelt, aber erschwert Debugging und Konsistenz. Microservices skalieren Teams, aber nicht ohne verteilte Systeme-Kosten. Die Wahl ist ein Trade-off, kein Optimum.

Praxis-Szenario: Monolith oder Microservices?

Ein Startup hat 6 Entwickler, eine CRUD-App mit wachsender Business-Logik und eine hohe Release-Frequenz. Soll das Team auf Microservices umstellen?

✅ Wichtige Erkenntnisse

Haken setzen, um deinen Lernfortschritt zu markieren:

    This site uses essential cookies for Stripe payments. No tracking cookies.