ViewModel

Properties, Bindings und MVVM: Die Angebotsliste mit ViewModel testen

Das dritte Ticket der Desktop-App: Die Angebotsliste bekommt ein ViewModel. Du lernst Properties als beobachtbare Werte kennen, verbindest sie mit uni- und bidirektionalen Bindings, leitest Werte mit Bindings.createStringBinding ab und filterst und sortierst mit ObservableList, FilteredList und SortedList. Das Entwurfsmuster MVVM trennt View, ViewModel und Model, sodass sich die Logik ohne Fenster mit JUnit testen lässt. Zum Schluss geht es um Speicherlecks und Endlosschleifen, die Listener und Bindings verursachen können.

Ein Ansichtsmodell für den Flurmonitor: Zeitfenster, Sortierung und Komponententests mit fester Uhr

Der Flurmonitor zeigt bisher alle offenen Fahrten ab heute. Jetzt bekommt die Seite ein eigenes Ansichtsmodell: zwei record-Typen, die genau das enthalten, was das Template braucht, und sonst nichts. Eine kleine Aufbereitung in der Web-Schicht trennt nach Richtung, filtert auf ein Zeitfenster bis zum Ende des nächsten Schultags, sortiert die früheste Abfahrt nach oben und markiert Fahrten mit dem letzten freien Platz. Weil all das von der Uhrzeit abhängt, kommt die Zeit aus einer Clock-Bean; parametrisierte JUnit-Tests mit fester Uhr prüfen die Grenzwerte um Abfahrt und Mitternacht.

Übungsaufgaben zum Ansichtsmodell: die Mitfahrgesuche im Zeitfenster

Die Seite für die Mitfahrgesuche bekommt ein eigenes Ansichtsmodell. In diesen Übungen ordnest Du Aufgaben der Service-Schicht, der Aufbereitung, dem Ansichtsmodell und dem Template zu, sagst voraus, welche Fahrten der Monitor am Freitagnachmittag zeigt, baust die Gesuche-Ansicht mit Zeitfenster und Sortierung, prüfst sie mit parametrisierten Tests und einer festen Uhr und findest einen Fehler, der nur zu bestimmten Uhrzeiten auftritt.

Model-View-ViewModel (MVVM)

Model-View-ViewModel ist als weiterer Nachkomme des GUI-Musters MVC vor allem durch C# mit XAML und Java mit FXML bekannt geworden. Was sind die zentralen Eigenschaften dieses Musters, und worin unterscheidet es sich vom ursprünglichen MVC und von MVP?