Railway-oriented Programming mit Java

Die Behandlung von null-Werten und das Exception-Handling tragen dazu bei, dass viele eigentlich einfache Funktionalitäten in Java in Form langer und unübersichtlicher Methoden voller Boilerplate-Code für die Fehlerbehandlung umgesetzt werden. Der Ansatz des Railway-oriented Programming - eine Idee aus der funktionalen Programmierung mit Implementierung in F# von Scott Wlaschin - vermeidet dies und ermöglicht kurzen und gut lesbaren Code, der sich auf die eigentliche Fachlogik beschränkt und die Fehlerbehandlung ganz nebenbei erledigt.

Dieser Vortrag zeigt anhand eines einfachen Beispiels die Idee des Railway-oriented Programming und eine mögliche Implementierung in Java. Einige dafür notwendige Datenstrukturen - wie Optional<T> - sind bereits in Java 8 verfügbar, andere werden passend entwickelt. Den dafür notwendigen kurzen Ausflug in den Bereich der Funktoren und Monaden gibt es gleich dazu, und ein abschließender Ausblick zeigt, wie gut das Konzept zum Domain Driven Design passt.

public Result<User> changePassword(
Username username, Password oldPasswort, Password newPassword)
{
return Result.combine(
Result.of(username, "Username cannot be empty"),
Result.of(oldPassword, "Old password cannot be empty"),
Result.of(newPassword, "New password cannot be empty"))
.onSuccess(() -> userRepo.find(username))
.ensure(user -> user.isCorrectPassword(oldPassword), "Invalid password")
.onSuccess(user -> user.changePassword(newPassword))
.onSuccess(user -> userRepo.update(user))
.onFailure(() -> logger.error("Password could not be changed"))
.map(user -> user);
}

Dienstag, 28.03.2017
13:00 - 13:40
Schauspielhaus
Fortgeschritten
Deutsch
Core Java & JVM-Sprachen
Macke

Stefan Macke

ALTE OLDENBURGER Krankenversicherung AG
Softwareentwickler/-architekt und Ausbilder für Anwendungsentwickler

Weitere Vorträge, die Sie interessieren könnten

Project Panama - the New Java Native
28.03.2017
Silverado Theater
15:00 - 15:40
Christoph Engelbert
Java 9 Modularity in Action
28.03.2017
Silverado Theater
16:00 - 16:40
Sander Mak
How to Create a New JVM Language in Under an Hour
29.03.2017
Quantum 1+2
14:00 - 14:40
Oleg Shelajev
Java Memory Model für Fortgeschrittene
29.03.2017
Quantum 1+2
15:00 - 15:40
Vadym Kazulkin
Reaktive Anwendungen mit RxJava
29.03.2017
Quantum 1+2
16:00 - 16:40
Michael Menzel