Flexible Anwendungsarchitektur mit der Clean und der Hexagonal Architecture


Online-Workshop am 23. September 2024, ca. 9:30 bis 16 Uhr
Neu ist immer besser! Zugegeben, nicht jeder ist dieser Meinung. In meiner Ansicht baut Neues oft auf Altem auf. Durch die Aufnahme neuer Ideen sowie durch die Beseitigung identifizierter Schwächen stellt Neues oft eine Verbesserung dar. Setzen wir dies in den Kontext von Architekturmustern, ist eine Entwicklung der Schichtenarchitektur als De-facto-Standard zu Ports-&-Adapters- basierenden Architekturmustern, wie z.B. der Clean oder der Hexagonal Architecture, als neuen De-facto-Standard wahrzunehmen.

Geht es allerdings darum, diese Architekturmuster im eigenen Projektkontext anzuwenden, ist der Wissensaufbau zeitgleich mit der Entwicklung von neuen Features eine hohe Hürde. Clean und Hexagonal Architecture stehen für Qualität und enthalten mehr Designregeln und -prinzipen als die Schichtenarchitektur. Dennoch kann schnell ein Verständnis für diese fortgeschrittene Architekturmuster aufgebaut und im Entwicklungsalltag angewendet werden.

Im Workshop „Flexible Anwendungsarchitektur“ beschreibe ich die grundlegenden Konzepte des Clean Architecture Pattern anhand konkreter Anwendungsfälle. Die Theorie wird mit Code-Beispielen und Übungen in Java vertieft. Im Fokus des Architekturentwurfs steht die Wartbarkeit und die Erweiterbarkeit der Softwarearchitektur. Darauf aufbauend werden die Philosophie der Evolutionären Architektur diskutiert und technische Lösungsstrategie erläutert. Ich möchte aufzeigen, dass die Lernkurve genommen werden kann und die Teilnehmer zur weiteren Vertiefung im Selbststudium befähigen. Hierfür erhältst Du alle Trainingsmaterialien und Zugang zu einer Demo-Anwendung.

Vorkenntnisse

Teilnehmer:innen sollten die folgenden Kenntnisse und Erfahrung mitbringen:

  • Mehr als 12 Monate praktische Erfahrung in arbeitsteiliger Softwareentwicklung im Team
  • Kenntnisse und praktische Erfahrung in mindestens einer höheren Programmiersprache (bevorzugt Java, Kotlin, C#, Python)
  • Vertraut mit Schichtenarchitektur, SOLID Prinzipien, Entwurfsmustern, Dependency Injection sowie Konzepte der Modularisierung (Module, Pakete, Namensräume)
  • Vertraut mit der Erstellung fachlicher Objektmodelle in Java oder in einer vergleichbaren Programmiersprache

Lernziele

  • Die Probleme der Schichtenarchitektur erkennen und ihnen mittels Ports & Adapters sowie fachlicher Modularisierung begegnen können
  • Die Clean und Hexagonal Architecture implementieren sowie diese Architekturmuster unterscheiden können
  • Unterschiedliche Modularisierungsvarianten und Mappingsstrategien für die Clean und Hexagonal Architecture anwenden können
  • Die Möglichkeit, Architektur mittels Architekturtest kontinuierlich zu testen und das Mindset der Evolutionären Architektur anzuwenden
  • Der praktische Teil in Java wird unterstützt durch eine Demo-Anwendung inklusive Programmierübungen.

Agenda

Softwarearchitektur als Struktur und Methodik
  • Funktionale Systemdekomposition und Modularisierung
  • Architekturmuster, Architekturprinzipien, Entwurfsmuster und Mustersprache
  • Time-To-Adaption und strukturelle Qualität von Softwarearchitektur
Ports & Adapters Architekturmuster
  • Die Schwächen der Schichtenarchitektur
  • Von der Schichtenarchitektur zu Ports & Adapters Architekturmuster
Eine isolierte Domäne erstellen
  • Implementierung von Geschäftsobjekten und Fachwerten nach dem Prinzip des Rich Domain Model
  • Domänen-bezogene Datenvalidierung implementieren
  • Unterschiedliche Aufgaben auf die Klassenstereotypen Service, Root Entity, Entity und Value Object verteilen
  • Code-Übung: Domänenmodell
Hexagonal Architecture
  • Die Domäne in der Hexagonal Architecture
  • Der Application Ring der Hexagonal Architecture
  • Der Framework Ring der Hexagonal Architecture
  • Der Klassenstereotyp ApplicationService, Repository, Controller und ServiceClient
  • Call-Flow durch die Hexagonal Architecture mit Code-Demo
Clean Architecture
  • Die Domäne in der Clean Architecture
  • Der Use-Case-Ring der Clean Architecture
  • Prinzipien des Use-Case-Schnitt
  • Der Famework Ring der Clean Architecture
  • Call-Flow durch die Clean Architecture
  • Code-Übung: Use-Case-Ring und Framework-Ring
Mapping-Strategien für Ports & Adapters basierende Architekturmuster
  • One-Way, Two-Way und Full Mapping Strategie
  • Mappings mit Third-Party-Bibliotheken vereinfachen
  • Mapper, Konverter und Factories
  • Code-Übung: Two-Way-Mapping-Strategie
Domain-Driven Modularization
  • Modularisierung mit Domänenmodulen anhand Root Entities
  • Strukturierung von Domänenmodulen
  • Entwurfsmuster für Beziehungen zwischen den Domänenmodulen
  • Coding-Übung: Abhängigkeiten zwischen Domänenmodulen
Evolutionäre Architektur
  • Motivation für Architektur-Disziplin anhand der Broken Window Theory
  • Das Mindset der Evolutionären Architektur
  • Fitness Functions für die Clean und Hexagonal Architecture
  • Coding-Übung: Clean Architecture Fitness Functions mit ArchUnit

 

Technische Anforderungen

  • Jede Teilnehmer:in trägt dafür Sorge, dass eine Demo Anwendung von GitHub geklont werden kann.
  • Jede Teilnehmer:in trägt dafür Sorge, dass eine lauffähige Java Entwicklungsumgebung mit der IDE seiner Wahl (empfohlen: IntelliJ) mit dem Build-Tool Maven für die Durchführung der Programmierübungen bereit steht.
  • Alternative für C# und Kotlin trägt die Teilnehmer:in dafür Sorge, dass ein Projekt erstellt und ausgeführt werden kann.
  • Der Workshop wird über Teams durchgeführt.
Wichtige Hinweise:
  • Codeübungen und -beispiele sind ausschließlich in Java.
  • Die Übungen können mit eingeschränktem Support auch in anderen Sprachen durchgeführt werden. Die Teilnehmer:in muss sich eine entsprechende Entwicklungsumgebung (IDE, Build-Tool, Programmiersprache) einrichten und trägt die Verantwortung, dass diese Umgebung funktioniert. Die Sprache muss Interfaces unterstützen.
  • Die Teilnehmer:innen, die Java verwenden, sollten im besten Fall IntelliJ, Maven und Java 21 oder höher installiert haben. Auch andere IDE und Build-Tools sind möglich.
  • Teilnehmer:innen, die das Demoprojekt verwenden möchten, benötigen allerdings Maven (Version 3.9.6 oder höher).

Speaker

 

Matthias Eschhold
Matthias Eschhold ist Lead-Architekt der E-Mobilität bei der EnBW AG. Mit seiner Erfahrung in der Softwarearchitektur und Domain-driven Design gestaltet er mit seinem Team die IT-Landschaft und Team Topologie der E-Mobilität. Trotz der Schwerpunkte auf strategischer und sozio-technischer Architekturebene, fühlt sich Matthias mit Java und Spring Boot auch auf der Code-Ebene zuhause, implementiert Prototypen und führt Refactorings durch. Seit vielen Jahren teilt Matthias seine Leidenschaft für Architektur als Trainer. Seine Stärke liegt in praxisnahen Schulungen, die nicht nur Architekturmuster und -prinzipien vermitteln, sondern auch die Realitäten von Projekten berücksichtigen. Er sucht stets nach Wegen, um Softwarearchitektur alltagstauglich zu machen.

betterCode-Newsletter

Du möchtest über die betterCode() ArchDoc und weitere unserer betterCode()-Events auf dem Laufenden gehalten werden?

 

Anmelden