Spring Modulith - Einführung, Code Beispiel & Live Demo

Поділитися
Вставка
  • Опубліковано 5 чер 2024
  • Mit #Spring #Modulith können Anwendungen aus fachlichen #Modulen aufgebaut werden. Die Spring Boot Erweiterung unterstützt den Entwickler mit automatisierter Verifikation der Modultrennung, durch Modul-Tests und die Generierung von Dokumentation.
    Im Video wird gezeigt, wie eine Anwendung in Module gegliedert werden kann. Die Features von Spring Modulith werden in einer Live-Demo vorgeführt und erläutert. Zur ereignisbasierten Kommunikation zwischen Modulen gibt es einen kurzen Überblick.
    Inhalt:
    00:00 Einleitung
    00:30 Was ist Spring Modulith?
    00:49 Application Modules
    02:48 Live Demo
    03:15 Der Code
    06:18 Spring Modulith
    07:50 Verifizierung
    09:49 Dokumentation
    10:33 Tests
    11:30 Production Features
    11:58 Domain Events
    14:10 Externalizing Events
    14:56 Fazit
    Quellcode und Links findest du unter:
    www.predic8.de/spring-modulit...
    Schulungen Online, in Bonn oder als Firmenseminar:
    Intensivkurs Softwarearchitektur: Paradigmen, Technik und Praxis
    www.predic8.de/softwarearchit...
    Mich, Thomas Bayer findet ihr auf:
    Twitter: @thomasub
    Xing: www.xing.com/profile/Thomas_B...
    LinkedIn: / thomas-bayer-0291592
  • Наука та технологія

КОМЕНТАРІ • 12

  • @ronaldgarciavazquez8232
    @ronaldgarciavazquez8232 28 днів тому +1

    Thank you so much, I´m sorry for my English, I´m from Bolivia and speak Spanish.. I´m happy fpr my with your video explain, grettings.

    • @predic8
      @predic8  27 днів тому +1

      Thanks for the comment. Hope the subtitles weren't to bad.

  • @fahrican9708
    @fahrican9708 2 місяці тому +1

    super video!

  • @KingGeooorg
    @KingGeooorg 3 місяці тому +2

    super Veranschaulichung, vielen Dank dafür! Als es ums Thema Schichten-Trennung ging, fiel mir direkt ArchUnit ein -- umso besser, dass es direkt integriert ist. Inwieweit sich der "magische Ansatz" von Spring hier anbietet oder ein eigener Ansatz, wird sich zeigen. Meistens liegt die Wahrheit ja irgendwo in der Mitte ;-)

    • @thomas-bayer
      @thomas-bayer 3 місяці тому

      Danke für deinen Kommentar.

  • @marcom.
    @marcom. 3 місяці тому +1

    Hallo Thomas,
    danke für diese Einführung. So sehr ich auch die Intention von Spring Modulith begrüße, bin ich doch irgendwie sehr am zweifeln, ob dieser Ansatz weit genug greift.
    Meine Hauptkritik ist, dass die Modularisierung ausschließlich "gedanklich" vorhanden ist. Es werden keinerlei höherwertige Modulkonzepte verwendet, die schon zur Entwicklungszeit greifen und zum Teil deutlich strenger und mächtiger sind. Es werden keine Java Modules verwendet. Außerdem haben wir keine getrennten Maven-Module und keine getrennten Repositories. Für die Entwickler ist es also weiterhin ein großer Code-Monolith, wo sich alle gleichzeitig mit ihren Änderungen, Abhängigkeiten und Commits in die Quere kommen.
    Das Konzept klingt auch nicht so, als ob es gut geeignet ist, wenn man nachträglich einen Modulithen zu echten Microservices umbauen möchte. Das geht los mit der Unterscheidung zwischen interner und externer Events - wobei das immerhin schon gut ist, dass beides möglich ist. Ich vermisse aber einen allgemeinen Ansatz von Commands und Queries, wenn ich die APIs anderer Module aufrufen will. Und dann ist da noch das große Problem des gemeinsamen Applikationskontextes. Connection Pools, Caches, Transaktionen - das alles ist vermutlich modulübergreifend und kann natürlich entsprechende Seiteneffekte bewusst oder unbewusst hervorrufen.
    Insofern stellt sich mir die Frage nach dem wirklich Ziel von Spring Modulith. Ja, es unterstützt sicherlich die saubere Strukturierung einer Spring-Boot-Anwendung, aber aus meiner Sicht geht es längst nicht weit genug, um als Vorstufe echter Microservices zu dienen - in dem Sinne, dass man später jederzeit einzelne oder mehrere Module in autarke Services ausgliedern kann.

    • @thomas-bayer
      @thomas-bayer 3 місяці тому

      Hallo Marcom, danke für deine Kritik an Spring Modulith und die Diskussionspunkte. Ich frage mich auch, wo Java- oder Maven Module vielleicht besser passen. OSGi hätte noch eine Alternative sein können, die viele Probleme ganz gut gelöst hätte. Leider hat sich OSGi aber nicht so verbreitet. Das mit dem späteren Ausgliedern ist meiner Meinung nach mehr ein Argument als eine Eigenschaft.

    • @marcom.
      @marcom. 3 місяці тому +2

      @@thomas-bayer Hallo Thomas, ich habe vor ca. 3 Jahren mal an einem Spring-Boot-Projekt teilgenommen, wo wir für jeden Bounded Context zwei eigene Maven-Module erstellt haben: Eines für die Implementierung und eines für die öffentliche API. Jedes dieser Module hatte auch sein eigenes git-Repo. Java Modules waren damals nicht im Fokus, kann also nicht sagen, ob man den Ansatz sinnvoll nutzen könnte. Was wir aber gemacht haben: Jeder Bounded Context hatte seine eigene SubApplication mit eigenem Spring Context. Die Module wurden dann durch eine Spring Boot Application zusammengefasst. Kommunikation fand nur über die APIs statt, wobei die APIs letztlich aus Commands, Queries und Events bestanden. Ich denke Du verstehst, wohin die Reise da geht. Ist natürlich ein viel komplexeres Setup, aber gerade hier würde einem ein entsprechen vorgefertigtes "Modulith-Framework" viel Arbeit abnehmen könnnen.

    • @thomas-bayer
      @thomas-bayer 3 місяці тому

      ​@@marcom. danke für die Beschreibung. Ich hoffe, dass Spring Modulith dazu beiträgt, dass mehr in Modularisierung investiert wird. Die Techniken dafür sind wie du beschreibst alle schon da. Die Maven-Module, SOLID-Prinzipien, Frameworks, ...

    • @odrotbohm
      @odrotbohm 2 місяці тому +1

      Danke für das Feedback. Grundsätzlich ist zu sagen, dass Spring Modulith keine Entweder-Oder-Alternative zu anderen Modulansätzen ist. Zum Einen ist das Featurespektrum von Spring Modulith *komplett* auf Applikationsentwickler zugeschnitten. Zum Anderen "fehlen" den von dir genannten Alternativen Features wie die Testintegration, die Dokumentation usw. völlig, und haben einen deutlich technischeren Fokus (JPMS: 1:1 Beziehung zwischen Modul & JAR usw.).
      Wichtig ist eigentlich zu erkennen, dass es eine Art "Werkzeugraum" gibt, in dem jedes Werkzeug unterschiedliche Tradeoffs eingeht und sich die Werkzeuge auch kombinieren lassen. Wenn man das Abhängigkeitsmanagement eher über Buildmodule realisieren möchte: bitte gern. Dann kann man immer noch die Dokumentations- und Integrationstestfeatures von Spring Modulith nutzen. Etwas herausgezoomt ist uns wichtig, den Blick für dieses Thema zu schaffen: wie bilde ich eine fachliche Architektur in einer Applikation ab.
      Der potentielle Umbau in ein später verteiltes System ist durchaus ein Thema für uns. Der gesamte Bereich der Unterstützung für Event-basierte Kommunikation bereitet genau das vor, weil man dadurch die Transaktionsklammern bereits auf einzelne Module begrenzt. Ist das erstmal in der Applikation etabliert, ist es recht einfach, ein Modul in eine separate App zu schieben und die Events z. B. über einen Kafka in die andere Applikation zu tragen. Das funktioniert in den Produktionsdeployments die wir aktuell sehen ziemlich gut.
      Ich weiß von Projekten, die nicht Spring Modulith verwenden, aber für jedes logische Modul einen separaten ApplicationContext starten. Das erfordert deutlich mehr technische Koordination und verbraucht deutlich mehr Ressourcen (EntityManager und Servletcontainer pro Kontext usw.) Ich sage nicht, dass das falsch ist. Es ist nur wieder ein anderer Tradeoff. Gut möglich, dass wir das irgendwann als advanced Feature auch mal anvisieren.

  • @RandomDude-ux3gh
    @RandomDude-ux3gh 3 місяці тому +1

    Eure Fruitshop API Funktioniert nicht :) Wann läuft die wieder ?

    • @thomas-bayer
      @thomas-bayer 3 місяці тому

      Danke für den Hinweis. Die API sollte verfügbar sein. Gab es eine Fehlermeldung oder ein Timeout?