Smarte Inputs für die Website der Zukunft

Ziel dieses Projekts ist es, unterschiedliche Ansätze zur Wiederverwendung von Validierungslogik für geschäftliche Informationssysteme zu untersuchen. Einerseits müssen sämtliche eingegebenen Daten vom Backend validiert werden, andererseits möchte man dem Nutzer möglichst direkt bei der Dateneingabe im Browser Rückmeldung geben können, ggf. auch, wenn die Anwendung gerade offline läuft. Hierbei soll die Parallelpflege von Validierungslogik in Backend und Client vermieden werden.

Um das Erstellen von Frontends zu erleichtern, verfolgt das Innovation Lab verschiedene Ansätze, um die parallele Wartung zu vermeiden. Rahmenbedingungen hierfür sind ein Server – realisiert in Java – und eine Website, die auf Angular 5 aufbaut. Zusätzlich muss das Angular Frontend Offline-Fähigkeiten bieten.

 

Deklarative, annotationsbasierte Validatoren

In Java können Datensätze mit Hilfe des sogenannten Bean-Models dargestellt werden. Zur Validierung solcher Java Beans kann Hibernate Validator verwendet werden. Hibernate sieht die Validierung mit Hilfe von Annotationen im Code vor, wie das nachfolgende Beispiel zeigt.

@ValidAmountOfDoors
public class CarBE {
/*...*/ 
private CarTypeEnum carType;
private int amountOfDoors;
@Size(min = 3, max = 4) 
private List <@Valid TireBE> tires; 
/*...*/ 
}

Die Annotationen ValidAmountOfDoors, Size und Valid  werden von Hibernate Validator zur Laufzeit interpretiert und bilden somit die Validierungslogik.

 

Die deklarative Logik kann nun für das Frontend von Vorteil sein, indem der Server nicht nur die aktuellen Daten für das Frontend serialisiert, sondern zusätzlich auch die deklarierten Validierungs-Annotationen. Die Angular Website kann anhand der serialisierten Informationen dynamisch Eingabemasken inklusive der Validierungsregeln erstellen. Dazu muss im Frontend nur die Logik der Annotationen hinterlegt sein, d.h. ValidAmountOfDoors, Size und Valid müssen zusätzlich implementiert sein. Somit kann die Duplizierung auf wenige nahezu atomare Bausteine wie Size reduziert werden. Die Kombination dieser Bausteine ist flexibel möglich und verhindert zusätzliche Code-Duplizierung.

Um eine Duplizierung von Code gänzlich zu vermeiden, sollte die serverseitige Validierung im Frontend wiederverwendet werden. Hierzu untersucht das Innovation Lab einen weiterführenden Ansatz:

Transpilierung der Business Logik

Die Überführung von Java nach TypeScript, wie es in Angular 5 verwendet wird, stellt eine Herausforderung dar. Abhilfe schafft der JSweet Transpiler (http://www.jsweet.org/), der Java-Code nach TypeScript konvertiert bzw. transpiliert. Derzeit werden im Innovation Lab die Möglichkeiten des JSweet Transpilers in Verbindung mit Validierungs-Code eines realen Versicherungsprojektes getestet.