MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf ·...

15
DBS MVVM (Model View ViewModel) in JavaFX SEP Sommersemester 2019 Nicolas Brauner 30.04.2019 Wissenschaftlicher Betreuer: Maximilian Hünemörder, Ludwig Zellner Verantwortlicher Professor: Prof. Dr. Peer Kröger

Transcript of MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf ·...

Page 1: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

DBS

MVVM (Model View ViewModel) in JavaFX

SEP Sommersemester 2019

Nicolas Brauner30.04.2019

Wissenschaftlicher Betreuer: Maximilian Hünemörder, Ludwig ZellnerVerantwortlicher Professor:Prof. Dr. Peer Kröger

Page 2: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM (Model View ViewModel) in JavaFX 2

1. Motivation: Design Patterns

2. MVC (Model View Controller)

3. MVVM (Model View ViewModel)

1. Definition

2. MVVM in JavaFX

Übersicht

Page 3: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

Motivation: Design Patterns

Was sind Design Patterns?

Entwurfsmuster (englisch design patterns) sind bewährte Lösungsschablonen für wiederkehrende Entwurfsprobleme [...]. Sie stellen damit eine wiederverwendbare Vorlage zur Problemlösung dar, die in einem bestimmten Zusammenhang einsetzbar ist.

(Quelle: Wikipedia, Entwurfsmuster)

MVVM (Model View ViewModel) in JavaFX 3

Page 4: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

Motivation: Design Patterns

Entstehung:

• Ursprünglich aus der Architektur

• Später: Für Erstellung grafischer Benutzeroberflächen mit Smalltalk

• Verbreitung durch Promotion Erich Gammas

• Publikation des Buches Design Patterns –Elements of Reusable Object-Oriented Software zusammen mit Richard Helm, Ralph Johnson, John Vlissides (Gang of Four)

MVVM (Model View ViewModel) in JavaFX 4

Page 5: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

Motivation: Design Patterns

• Vier Elemente eines Design Patterns:

– 1. Pattern Name

– 2. Problem

– 3. Solution

– 4. Consequences

• Drei Arten von Design Patterns:

– Creational Patterns (Erzeugungsmuster)

– Structural Patterns (Strukturmuster)

– Behavioral Patterns (Verhaltensmuster)

MVVM (Model View ViewModel) in JavaFX 5

Page 6: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVC (Model View Controller)

MVVM (Model View ViewModel) in JavaFX 6

• Trennung zwischen Datenmodell, Präsentation und Programmsteuerung

• Entwurfs- und/oder Architekturmuster

View

Controller

Model

Update ModelExecute Event

Notify

Data Access

Page 7: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

Probleme mit MVC

• Heutige Systeme sind viel komplexer als damalige -> MVC Character lässt sich auf verschiedenen Ebenen erkennen, aber unklare Beschreibung.

• Nicht immer klar trennbar: Model kann Geschäftslogik halten, Controller kann mehrere Modelle halten, View kann Felder validieren etc.

➔ Ausarbeitung spezifischerer Designpatterns wie Model View ViewModel (MVVM)

MVVM (Model View ViewModel) in JavaFX 7

Page 8: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM (Model View ViewModel)

• Trennung zwischen Ansicht, Daten und deren Verarbeitung wie bei MVC

• JavaFX arbeitet speziell mit MVVM (aufgrund des Datenbindungsmechanismus)

Einführung in JavaFX 8

View ViewModel ModelDataBinding

Presentation and Presentation Logic BusinessLogic and Data

Page 9: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM

• Im Gegensatz zum Controller in MVC, steuert ViewModel nicht die View, sondern stellt lediglich die Daten dafür bereit (Databinding)

• MVVM ist technologispezifisch aufgrund des Binders

• Auch GUI Unit Tests sind mit MVVM möglich

• Die View benötigt keinen hinterlegten Code

MVVM (Model View ViewModel) in JavaFX 9

Page 10: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM in JavaFX

MVVM (Model View ViewModel) in JavaFX 10

StringProperty a = new

SimpleStringProperty();

StringProperty b = new

SimpleStringProperty();

a.bindBidirectional(b);

a.set("Hallo");

System.out.println(b.get());

// "Hallo"

b.set("Welt");

System.out.println(a.get());

// "Welt"

public class MyViewModel {

private StringProperty labelText =

new SimpleStringProperty("default");

private StringProperty inputText =

new SimpleStringProperty();

private BooleanProperty buttonDisabled =

new SimpleBooleanProperty();

public MyViewModel() {

buttonDisabled.bind(inputText.isEmpty());

}

public void changeLabel() {

labelText.set(inputText.get());

inputText.set("");

}

// getter, setter, property-accessors

}

Page 11: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM in JavaFX

MVVM (Model View ViewModel) in JavaFX 11

public class MyView {

@FXML

Label label;

@FXML

TextField input;

@FXML

Button button;

MyViewModel viewModel = new MyViewModel();

public void initialize() {

label.textProperty().bind(viewModel.labelTextProperty());

input.textProperty()

.bindBidirectional(viewModel.inputProperty());

button.disableProperty()

.bind(viewModel.buttonDisabledProperty());

}

// will be called when button is pressed

public void onAction() {

viewModel.changeLabel();

}

}

Page 12: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM in JavaFX

• Views lassen sich als FXMLs erstellen und mittels Property Binding mit der Geschäftslogik (also ViewModel und Model) verbinden (uni- oder bi-direktional)

• Einbinden eines Controllers/ViewModels in fxml File

MVVM (Model View ViewModel) in JavaFX 12

Page 13: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM in JavaFX

MVVM (Model View ViewModel) in JavaFX 13

@Override

public void start(Stage primaryStage) throws Exception{

//create a root and load fxml code

Parent root = FXMLLoader.load(getClass().getResource("views/HelloView.fxml"));

//add root to the window and show it

primaryStage.setTitle("Hello World");

primaryStage.setScene(new Scene(root));

primaryStage.show();

}

Page 14: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

MVVM in JavaFX

MVVM (Model View ViewModel) in JavaFX 14

<GridPane alignment="center … fx:controller="sample.viewmodels.HelloViewModel">

<columnConstraints>

<ColumnConstraints hgrow="ALWAYS" … />

</columnConstraints>

<rowConstraints>

<RowConstraints percentHeight="25.0" vgrow="ALWAYS" />

</rowConstraints>

<children>

<Label fx:id="messageLabel" …>

<font> <Font size="25.0" /> </font>

</Label>

<Label fx:id="messageLabelTwo“ …>

<font> <Font size="25.0" /> </font>

</Label>

</Button>

</children>

</GridPane>

Page 15: MVVM (Model View ViewModel) in JavaFX - uni-muenchen.de › ... › sep19 › mvvm_in_javafx.pdf · 2019-04-30 · MVVM • Im Gegensatz zum Controller in MVC, steuert ViewModel nicht

Vielen Dank für eure Aufmerksamkeit!

MVVM (Model View ViewModel) in JavaFX 15