Softwareentwicklung und Architektur/ 30.06.2020 / Sergej Epp

Teil 1: Web-Apps mit Groovy on Grails programmieren

Während eines ihrer Kunden-Engagements haben unsere AUSY Technologies-Kollegen Sergej Epp und Felix Hau ein „On-the-fly“-Projekt realisiert: Nämlich eine App, die die Stakeholder über geplante Absenzen der Teammitglieder informiert.

Für das Projekt kamen das Web-Framework Groovy on Grails sowie die Graphdatenbank Neo4J zum Einsatz. In dieser dreiteiligen Blogserie beschreiben sie, welche Vorteile die beiden Technologien haben und wie sie sich im Praxis-Einsatz bewähren. Teil 1 stellt Groovy on Grails genauer vor.

 

Eine kurze Einführung in Grails

Um in das Webframework Grails einzuführen, sehen wir uns zunächst die Programmiersprache Groovy an und welche Gemeinsamkeiten beziehungsweise Unterschiede sie zu Java aufweist. 
Zunächst ist Groovy eine Sprache, die in der Java Virtual Machine (JVM) läuft und daher zu Java vollständig kompatibel ist. Java-Code kann also problemlos in eine Groovy-Applikation eingefügt werden. Groovy kann darüber hinaus sowohl als „klassische“ Programmiersprache zum Einsatz kommen als auch als Skriptsprache. Bei ersterer Anwendung entsteht nach dem Kompiliervorgang Java-Bytecode, der sich plattformübergreifend anwenden lässt. 

Durch Erweiterungen und Verbesserungen der Syntax hat Groovy gegenüber Java auch einige Vorteile. Hierzu gehören unter anderem die folgenden Features:

  • Safe Navigation Operator – In Java-Code finden sich üblicherweise zahlreiche Null-Checks, die eigens programmiert wurden. Mit dem Safe Navigation Operator in Groovy bedarf es dafür lediglich einer Erweiterung durch „?“. Zeigt in einer so gekennzeichneten Methode das Objekt auf die null-Referenz, zeigt die Variable ebenfalls auf null. Ist dies nicht der Fall, wird die Methode normal aufgerufen.
  • Spread-Operator – Der Spread Operator „*“ iteriert eine Liste und ermöglicht, dabei bestimmte Parameter in eine neue Liste zu übergeben.
  • Dynamische und statische Datentypen – Datentypen in Groovy können sowohl dynamisch als auch statisch angegeben werden. Hierdurch ist eine stärkere Objektorientierung gegeben als zum Beispiel bei Java.
  • Erweiterter Standard-Import – Der Standard-Import des Packages java.lang umfasst bei Groovy weitere Klassen und Pakete. So zum Beispiel math.BigDecimal, wodurch Groovy die Arbeit mit Nachkommastellen sehr gut beherrscht.

Diese und weitere Syntax-Erweiterungen helfen dabei, das Programmieren an bestimmten Stellen eleganter zu gestalten, als es in Java möglich wäre. Im Zuge unseres Praxisprojekts, das im dritten Teil dieser Blogserie näher beleuchtet wird, hat uns Groovy viel Freude bereitet. Der Code ist am Ende gut lesbar und handhabbar. Nichtsdestotrotz hat auch Java weiterhin seine Berechtigung – insbesondere, wenn es um die Geschwindigkeit geht. Denn hier hat das „Original“ nach wie vor seine Vorzüge gegenüber Ablegern wie Groovy.

 

Was kann Groovy on Grails?

Das Webframework erfreut sich seit seiner Erstveröffentlichung im Jahr 2003 wachsender Beliebtheit. Der Name ist an das in Ruby geschriebene Framework „Ruby on Rails“ angelehnt. Grails ist quelloffen und mittlerweile ab der Version 4 erhältlich.

Grails ist stark von den beiden Programmier-Paradigmen Convention over Configuration und Don’t repeat yourself (DRY) gekennzeichnet. Ersteres besagt, dass die Konfiguration auf „unkonventionelle“ und applikationsspezifische Aspekte zu beschränken sind. Bezogen auf Webframeworks wie Grails bedeutet dies, dass möglichst viele Entscheidungen beziehungsweise Konventionen von Beginn an feststehen und Entwickler somit innerhalb eines vordefinierten Rahmens für ihre Applikation arbeiten können. Zweiteres, dass Redundanzen zu vermeiden sind. Jede Informationseinheit soll klar definiert und einzigartig (im Sinne von „eindeutig“) sein. Hierdurch bleibt die Einfachheit im Aufbau gewährleistet.

Das Kern-Modul von Grails liefert bereits zahlreiche Komponenten und Konzepte mit. Dazu gehört unter anderem die Object-Mapping Bibliothek GORM. Durch diese lassen sich das Schema und die Schicht für den Datenbankzugriff erstellen. Von SQL über MongoDB bis hin zu GraphQL werden zahlreiche Datenbanken unterstützt. Hinzu kommt das eingebaute Build-Tool Gradle, das eine starke Ähnlichkeit mit Maven aus dem Java-Umfeld aufweist. Darüber hinaus lässt sich Grails über die sehr flexible Einbindung von externen Plugins um neue Features erweitern.

 

Ein Web-App-Framework für den schnellen Praxis-Einsatz

Dies alles hat den Vorteil, dass Grails ohne aufwändige Konfiguration einfach und schnell einsatzfähig ist. Dabei kann eine integrierte Entwicklungsumgebung wie beispielsweise IntelliJ zum Einsatz kommen – was aber keineswegs obligatorisch ist. Die erwähnten Paradigmen Convention over Configuration und Don’t repeat yourself (DRY) sind in Grails deutlich spürbar realisiert, sodass sich das Framework griffig und leicht einsetzbar zeigt.

Um eine Web-App in Groovy zu programmieren, ist Grails also ein sehr guter Startpunkt. Nicht zuletzt vereinfachen die Tools die Arbeit für Entwickler erheblich, was einen Ein- oder Umstieg auf Groovy beziehungsweise Grails erleichtert.

In Teil 3 dieser Blogserie werden wir noch genauer aufzeigen, wie wir in dem Beispielprojekt mit Grails vorgegangen sind. Zuvor wenden wir uns in Teil 2 noch der Graphdatenbank Neo4J zu, die sich sehr gut mit Grails für Web-Apps kombinieren lässt.

Einblicke

Shaping the future with our clients