Seit nun fast einem Jahr schreibe ich meine Wiki-Hosting-Plattform wikihost.org in Grails neu. Die bisher zugrundeliegende Technologie, die tdbengine, erschien mir für ein solches Portal einfach nicht mehr zeitgemäß.
Am Anfang stand die Entscheidung, in welcher Programmiersprache bzw. mit welchem Framework ich das (Mammut)-Projekt angehe. PHP und Perl mag ich nicht, Java-Servlets erschienen mir sehr umständlich und aufwändig und an mir völlig fremde Sprachen, wie Ruby oder Python traute ich mich nicht. Mit Grails und Groovy fand ich einen Mittelweg aus Java- und JavaScript-ähnlicher Programmierung, welche ich mir, mit ein wenig Lektüre, schnell aneignen konnte.
Und ich muss heute sagen, dass dies eine gute Entscheidung war und ich bis heute nicht von Grails enttäuscht wurde.
Hier nun meine 5 Gründe, warum ich finde, dass Grails einfach groovy ist:
1. Die zugrundeliegende Sprache Groovy
Mit Groovy zu arbeiten ist einfach … groovy. Während Java starr und restriktiv jede noch so kleine Abweichung vom Schema F abstraft, ist Groovy, welches Grails zu Grunde liegt, wesentlich gelassener. Ob man nun eine Funktion bzw. Methode mit oder ohne Klammern aufruft, um Parameter zu übergeben ist egal. Datentypen? Kann bzw. sollte man dort benutzen, wo es notwendig und sinnvoll ist. Darf man aber getrost ignorieren, wo es zulässig erscheint.
Groovy ist ausserdem eine funktionale Sprache und löst sich vom Paradigma Javas, welches extrem Objekt-bezogen ist. Mit sogenannten Closures bieten sich ganz neue Ansätze beim Code-Schreiben: Einer Funktion als Parameter eine Funktion zu übergeben, das gibt es in Java so nicht.
Kleines Beispiel in Java und Groovy:
//Java
char[] arr = {'a','b','c'};
for(int i = 0; i < arr.length; i++) {
System.out.println( arr[i] );
}
//Groovy
['a','b','c'].each { println it }
2. Man muss sich an vielen Stellen einfach keine Gedanken über die zugrundeliegende Datenbank machen
Der O/R-Mapper Hibernate ist fast völlig transparent in Grails integriert. Hat man seine Datenbank in der Konfiguration korrekt hinterlegt und sogenannte Domain Classes definiert, sorgt dieser dafür, zu jeder Klasse eine entsprechende Datenbank-Tabelle zu erzeugen bzw. diese entsprechend anzupassen. Um korrekte SQL-Syntax, Normalisierung oder Indexierung der Daten muss (kann aber trotzdem) man sich keine Gedanken machen.
// Beispiel Domain-Klasse
package org.example
class Poem {
String title
String author
static constraints = {
title(blank: false)
author(blank: false)
}
}
3. Convention over Configuration bringt schnelle Ergebnisse
Wer sich die Website zu Hibernate oder dem Spring-Framework mal etwas genauer durchliest, wird immer wieder auf XML-Strukturen stoßen, mit denen diese Frameworks konfiguriert werden. Das ist aufwendig, fehleranfällig und mit Grails auch gar nicht notwendig. Grails setzt gewisse Conventions voraus, wie z.B. Class-Names wie FlugzeugController, um dahinter eine Controller-Klasse (im Sinne des MVC-Patterns) zu definieren, die bestimmte Methoden bereitstellt. Darum, dass es sich letztlich um Servlets handelt, die im Container gemappt werden müssen, braucht der Entwickler sich keine Gedanken zu machen.
4. Plugins für viele unterschiedliche Aufgaben existieren bereits
Egal ob eine Anbindung an PayPal erfolgen soll, ob die eigenen Inhalte per Volltextsuche via Lucene durchstöbert werden sollen oder ob einfach hübsche Formular-Widgets im Browser der Besucher erscheinen sollen, es gibt für vieles ein passendes Plugin. Diese Plugins können dank der verwendeten IDEs (Netbeans oder Eclipse) mit wenigen Klicks eingebunden werden und stehen danach transparent zur Verfügung.
Dadurch kann man sich für viele Aufgabenstellungen die grundlegende Arbeit sparen und nutzt (meist) ausgereifte Bibliotheken.
5. Im schlimmsten Fall steht einen die ganze Welt von Java zur Verfügung
Weil Groovy letztlich wie ein Aufsatz auf Java funktioniert und letztendlich ganz normale .class-Dateien als Kompilat herauskommen steht einem die ganze Welt von Java zur Verfügung. D.h. alle Taglibs oder Bibliotheken, die man in einem normalen Java-Programm nutzen kann, lassen sich auch in einer Grails-Applikation verwenden. Daher mache ich mir so schnell auch keine Sorgen, dass ich mich mit wikihost.org bzw. der darunterliegenden Umgebung wieder in eine Sackgasse manövriere.
Es gibt sicherlich noch viele weitere Gründe, warum das Arbeiten mit Grails mir groovy erscheint. Vielleicht liefere ich ja demnächst noch weitere nach.