© Excellent backgrounds/Shutterstock.com
Annotationsgesteuertes Data Binding in Rich-Client-Applikationen

Data Binding - optimiert!


Ein Data-Binding-Framework ermöglicht es, eine Verbindung zwischen Attributen von Objekten herzustellen und diese bei Änderungen zu synchronisieren – eine Funktion, die insbesondere bei der Entwicklung grafischer Oberflächen sehr hilfreich ist, um das Model an die View anzubinden. Je nach verwendetem UI-Toolkit existieren bereits ausgereifte Data-Binding-Frameworks. Für Anwendungen auf Basis der Eclipse Rich Client Platform (RCP) wäre hier JFace Data Binding [1] zu nennen. Für Swing-Anwendungen existieren verschiedene Frameworks wie z. B. JGoodies Data Binding [2] oder Better Beans Binding [3].

Die eingangs genannten Frameworks ermöglichen eine lose Kopplung zwischen Model und View und erleichtern die Entwicklung erheblich. Allerdings ist auch einiges an Code notwendig, vor allem, wenn in einem Binding auch Konvertierungen und Validierungen durchgeführt werden sollen. Deshalb möchte ich hier einen Ansatz vorstellen, mit dem wir durch den Einsatz von Annotationen den Aufwand für das Data Binding auf ein Minimum reduzieren konnten.

Um ein Gefühl dafür zu bekommen, wie die meisten Data-Binding-Frameworks arbeiten, möchte ich zunächst am Beispiel von JFace Data Binding zeigen, wie man ein Binding zwischen zwei Objekten herstellen kann.

Listing 1

IObservableValue widget = WidgetProperties.text(SWT.Modify).observe(firstNameText); IObservableValue model= BeanProperties.value(Person.class,"firstName").observe(person); DataBindingContext ctx = new DataBindingContext(); ctx.bindValue(widget, model); 

Listing 1 zeigt den notwendigen Code, um das String-Attribut firstName der Modellklasse Person an das Text-Objekt firstNameText zu binden. In JFace Data Binding erzeugt man dazu zunächst jeweils ein ObservableValue für die zu synchronisierenden Attribute. Für Widgets bietet dazu die Factory-Klasse WidgetProperties entsprechende Methoden an. Für Java Beans erfolgt die Erzeugung über die Factory BeanProperties. Der Name der zu überwachenden Property wird dabei als String übergeben. DataBindingContext ermöglicht es, eine Verbindung zwischen ObservableValues herzustellen und ist damit eine der zentralen Klassen in JFace Data Binding. Das Binding erfolgt über die bindValue-Methode, der das ObservableValue für Widget und Model übergeben werden.

Soll bei der Synchronisierung zusätzlich eine Validierung erfolgen, oder falls für die zu verbindenden Datentypen keine Converter existieren, kann der bind­Value-Methode zusätzlich für jedes ObservableValue eine UpdateValueStrategy ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang