Java: Boilerplate Code in DTOs vermeiden

Während moderne Programmiersprachen, wie Groovy, relativ viel Code automatisch erzeugen, muss ich als Java Entwickler relativ viel selber schreiben.

Nehmen wir eine Klasse “Person” in Groovy:


class Person{
   String firstName
   String lastName
}

In Java sieht das ganze schon so aus:


class Person{
   private String firstName;
   private String lastName;

   public String getFirstName() {
       return firstName;
   }

   public void setFirstName(String firstName) {
      this.firstName = firstName;
   }

   public String getLastName() {
       return lastName;
   }

   public void setLastName(String lastName) {
      this.lastName = lastName;
   }
}

Was hier noch fehlt sind hashCode(), toString() und equals().

Das Problem hier ist klar: Der Code wird in der Regel automatisch generiert und stört höchstens beim Lesen. Wenn man DTOs irgendwann ändert, dann werden gerade hashCode(), toString() und equals() häufig vergessen und das ist eine häufige Quelle für Bugs. Kurz: Wir müssen in Java recht viel Code schreiben und produzieren schnell einen Fehler, wenn wir die Klasse später nicht sorgfältig aktualisieren.

Weniger Code mit Lombok

Seit 2 Jahren setze ich gerade für DTOs Lombok ein: Lombok erzeugt den ganzen Boilerplate Code für mich zur Compile Time (in der .class Datei stehen die Methoden also drin. Nix AOP oder so). Das sieht dann so aus:


@Data
class Person{
   private String firstName;
   private String lastName;
}

Durch @Data generiert Lombok für mich die folgenden Methoden:

  • alle Getter und Setter,
  • equals(),
  • hashCode(), und
  • toString()

Damit das ganze in Eurer IDE funktioniert müsst ihr ein Plugin installieren (siehe hier).

Für Maven (und Co) müsst ihr es nur als Dependency hinterlegen. Da die ganze “Magie” zur Compile Time passiert, muss Lombok nicht mit ins Artefakt gepackt werden.

Lombok wird aktiv entwickelt und bietet sehr viele nützliche Helfer und Konfigurationsmöglichkeiten wie z.B. eine Annotation um einen Logger zu erzeugen. Auf der Webseite sind alle Möglichkeiten, die Lombok bietet, sehr gut dokumentiert.

.svn Ordner rekursiv löschen

Auch wenn ich git gegenüber SVN vorziehe komme ich im Alltag nicht ganz ohne es aus.

Ein wirklich unschönes Problem ist dann, wenn ich einen Ordner, der versioniert ist, von den .svn Ordnern befreien möchte. Entweder, weil ich diese nicht mehr brauche oder, weil ich den Ordner bspw. in einem anderen branch verwenden möchte. In beiden Fällen ist das entweder viel Kleinarbeit oder kann unter Linux und OS X durch ein kleines Skript erledigt werden:

#!/bin/sh
rm -rf `find . -type d -name .svn`

Den Code einfach in einer .sh Datei speichern, diese in den Ordner, der bereinigt werden soll, kopieren und dann ausführen. Klappt ganz wunderbar.

Blogging

digitalocean

Nach ein paar Jahren blogge ich wieder unter ugotit.de. Vor allem, da ich nochmal ein Blog aufsetzen wollte und Digital Ocean ausprobieren wollte. Das ganze ist in wenigen Minuten eingerichtet:

  1. bei Digital Ocean registrieren
  2. Account bestätigen und Zahldaten hinterlegen
  3. Droplet anlegen (gibt schon eine Vorlage für WordPress)

Danach kommt der Aufwand, den man auch von anderen Anbietern gewohnt ist (Theme und so).

Ich habe für diesen Blog erstmal das kleinste Paket gewählt ($5/Monat: 512 MB Ram, 20GB Speicherplatz(SSD)). Ein Upgrade sollte aber auch schnell gemacht sein.

Meine Domains verwalte ich bei united-domains und kann sie problemlos auf mein Droplet per DNS Eintrag weiterleiten. Das ganze ist enorm komfortabel und auch günstig.