Desktop-Version

Start arrow Informatik arrow Strategie für die Portierung von Desktop-Business-Anwendungen auf iOS-gestützte Endgeräte

< Zurück   INHALT   Weiter >

5.4.2 Realisierung

Kapitel 5.4.2 zeigt anhand der CustomerView-Ansicht die Integration beider Architekturmuster. Die Integration erfolgt innerhalb von vier Schritten:

1. Datenbindungssystem implementieren

2. Befehlsweitergabe implementieren

3. Steuerung des Lebenszyklus anpassen

4. Dialogsteuerung anpassen

Damit der ViewController mit dem ViewModel kommunizieren kann, benötigt der ViewController eine Referenz auf das ViewModel. Dazu erhält jeder ViewController der Referenzanwendung ein Property namens ViewModel. Die Zuweisung der Instanz erfolgt innerhalb des Kontruktors im ViewController.

5.4.2.1 Datenbindungssystem implementieren

Die Aufgaben des Datenbindungssystems des WPF-Frameworks übernimmt der ViewController. Er reagiert zum einen auf Eingaben über die Ansicht und zum anderen auf Änderungen innerhalb des ViewModels. Dazu erhält der ViewController Referenzen auf die Interaktionselemente der Ansicht und abonniert deren ValueChanged-Ereignisse. Die Implementierung erfolgt in der Methode InitializeControls(). Sobald ein Anwender eine Eingabe abgeschlossen hat, erzeugt das Interaktionselement ein EditingDidEnd-Ereignis. Auf dieses Ereignis reagiert der ViewController und übergibt den Wert des Interaktionselements an die zugeordnete Eigenschaft des ViewModels.

Listing 5-7 Registrieren eines ValueChanged-Ereignisses

Auf der anderen Seite erzeugt das ViewModel ein PropertyChanged-Ereignis, sobald Änderungen im ViewModel vorliegen. Dieses Ereignis abonniert der ViewController im Konstruktor und ruft entsprechend die Methode UpdateControlls() auf, sobald das ViewModel dieses Ereignis auslöst. Siehe Listing 5-6.

Innerhalb der Methode UpdateControlls() übergibt der ViewController die Daten des ViewModels an die entsprechenden Interaktionselemente.

Listing 5-8 Aktualisierung eines Interaktionselements

Mit diesen Maßnahmen ersetzt der ViewController die Datenbindungsfunktionalität des WPF-Frameworks. Kapitel 5.4.2.1 zeigt, dass in iOS die Implementierung aufwändiger ist, als mit .NET. Hier sind lediglich zwei Einträge innerhalb der XamlDatei einer Ansicht zu tätigen.

Listing 5-9 Datenbindung mit WPF (Windows)

In Listing 5-9 ist die Text-Eigenschaft der TextBox mit der Eigenschaft des ViewModels verknüpft. Der Parameter Binding:RW sagt aus, dass eine schreibende und lesende Datenbindung besteht.

5.4.2.2 Befehlsweitergabe implementieren

Die Verknüpfung eines Touch-Ereignisses und die anschließende Befehlsweitergabe an das ViewModel lassen sich in zwei Varianten implementieren:

1. Target-Action-Designpattern

2. Registrieren des Ereignisses innerhalb des ViewControllers

In (1) existiert im ViewController eine Methode, die über das Target-ActionDesignpattern direkt mit der aufrufenden Schaltfläche der NIBoder Storyboard-Datei verknüpft wird. Innerhalb der Methode lässt sich direkt das weitere Vorgehen implementieren. Typischerweise erfolgt hier der Aufruf eines Befehls des ViewModels.

Listing 5-10 Aufruf des Befehls CopyToWholeWeek

In (2) hat der ViewController keine Target-Action-Beziehung zur Schaltfläche, sondern eine einfache Referenz auf die Schaltfläche. Innerhalb der InitialControlls()Methode registriert der ViewController ein Touch-Ereignis der referenzierten Schaltfläche und ruft den Event-Handler auf.

Listing 5-11 Registrieren eines Touch-Ereignisses

5.4.2.3 Steuerung des Lebenszyklus anpassen

In WPF übernimmt das ViewModel außerdem die Steuerung des Lebenszyklus einer Ansicht. Dazu nutzt es einen Zustandsautomaten, der abhängig des aktuellen Zustands verschiedene Methoden aufruft.

In iOS erledigt diese Aufgabe der ViewController. Damit in der iOS-Version es nicht zu Konflikten zwischen beiden Zustandsautomaten kommt, ist es notwendig, den Zustandsautomaten des ViewModells zu deaktivieren. Der Aufruf der einzelnen Methoden des ViewModells übernimmt dann der ViewController. Die nachfolgende Tabelle zeigt die entsprechenden Verknüpfungen:

ViewController

ViewModel

ViewDidLoad()

OnPrepare()

ViewDidAppear()

OnActivate()

ViewDidDisappear

OnDeactivate()

ViewDidUnload

OnRelease()

Abb. 5-23 Verknüpfung Zustände des Lebenszyklus

5.4.2.4 Dialogsteuerung anpassen

Neben den oben beschrieben Funktionalitäten übernimmt das ViewModel auch die Steuerung der Navigation. Das heißt, es ruft andere Dialoge auf und platziert sie entweder in den dafür reservierten Bereichen oder zeigt sie als modale Dialoge an. Diese Aufgaben übernimmt ebenfalls in der iOS-Anwendung der ViewController. Das liegt an den unterschiedlichen Formen, wie die einzelnen Plattformen ihre Dialoge aufrufen. (Siehe Kapitel 5.3.1). Deswegen sind sämtliche Implementierungen im ViewModel zu entfernen und im ViewController neu zu implementieren.

5.4.3 Bewertung der Integration beider Architekturmuster

Mit der Verknüpfung beider Architekturmuster ging die Herausforderung einher, die automatisierten Funktionalitäten des MVVM-Architekturmusters gegen manuelle Implementierungen auszutauschen. Der größte Aufwand entstand bei der Verknüpfung der Interaktionselemente mit den Eigenschaften des ViewModels, da hier die rechtzeitige und richtige Aktualisierung der Eingabeelemente sowie die Weiterleitung der ausgelösten Befehle manuell implementiert werden musste.

Dennoch ist die Nutzung des ViewModels für die Portierung eine erhebliche Arbeitserleichterung, da die Spezialisierung des Objektmodells nicht noch einmal implementiert werden muss und auf vorhandene Befehle zurückgegriffen werden kann.

 
< Zurück   INHALT   Weiter >

Related topics