17. April 2012

WPF und Windows Forms – Die Wahl zwischen den Windows GUI Technologien

Was ist eigentlich der Unterschied von Windows Forms und Windows Presentation Foundation WPF?
Wer sich das immer schon gefragt hat, und warum wir noch ein Microsoft GUI Framework brauchen ist hier genau richtig :)


In einem (wieder einmal interessanten) Wochen - Review von Carsten auf seinem Softwareentwickler-blog hat er auf einen ausführlichen Bericht von Mario Priebe verlinkt, den ich im folgendem zu Gute geben möchte:


WPF und Windows Forms – Die Wahl zwischen den Windows GUI Technologien.

WRITTEN BY:  - APR• 07•12
Wenn wir Entwickler für Windows grafische Benutzeroberflächen (GUIs) entwickeln möchten, haben wir die Wahl zwischen Windows Forms und WPF.
Jede dieser Technologien haben ihre Vor- und Nachteile. In diesem Artikel möchte ich auf die Hauptunterschiede beider Technologien eingehen und bei der Entscheidung helfen, welche der beiden für den Einsatzzweck vom Vorteil ist.

Windows Forms

Windows Forms ist die ältere der beiden Technologien und ist die Basis für die meisten (älteren) Windows Applikationen. Die meisten Entwickler haben bereits umfängliche Erfahrungen mit dieser Technologie machen können.
Mit Windows Forms können Formulare in unterschiedlichen Größen und Formen von Fenstern erstellt werden und haben im Prinzip immer die selbe Anordnung für Container, Menüs und Struktur. Einen großen Spielraum für die Umsetzung von grafisch, anspruchsvollen Anforderungen hat man leider nicht, bzw. ist dies sehr schwierig mit Windows Forms umzusetzen, machbar ist es aber dennoch.
Windows Forms hat aber eine sehr gute Unterstützung für multilinguale Anwendungen. Wenn man also eine mehrsprachige Business-Applikation, bei der Usability und Optik nicht so wichtig sind, erstellen möchte, könnte man Windows Forms einsetzen. Man sollte sich aber dennoch den folgenden WPF-Teil anschauen.
Die Navigation innerhalb einer Windows Forms-Anwendung ermöglicht ein Wechseln innerhalb verschiedener Formulare im Single Document Interface Modus (SDI, der Benutzer sieht immer nur ein Fenster mit Informationen) und im Multi Document Interface Modus (MDI, der Benutzer kann mehrere Formulare zeitgleich geöffnet haben).
Für ein entsprechendes UI Pattern um eine Trennung zwischen Code und Design zu erzielen, bekommt man in Windows Forms von Hause aus leider nichts mitgeliefert. Hier kann man sich aber das MVP (Model View Presenter) Pattern anschauen. Es gibt auch ein Framework namens MVC#, welches einem dabei unterstützt. Aber auch der MVVM Ansatz kann beispielsweise über das Windows Application Framework(WAF) mittels Windows Forms Adapter nach implementiert werden.

WPF

WPF steht für Windows Presentation Foundation und ist der direkte Nachfolger von Windows Forms. Der wichtigste Unterschied zwischen WPF und Windows Forms ist, dass in WPF eine klare Trennung zwischen Code und Design herrscht, sprich UI und Logik können getrennt voneinander entwickelt werden.
Der Code kann dabei mit allen .NET basierenden Sprachen entwickelt werden. Die Beschreibungssprache für die UI nennt sich XAML und steht für Extensible Application Markup Language. Wichtig dabei ist, dass bei der Entwicklung der UI, dem Designer keinerlei Grenzen gesetzt sind. Alles ist möglich!
WPF-Applikationen werden in drei verschiedenen Typen unterteilt, welche für verschiedene Aufgaben zuständig sind. Windows-ApplikationNavigations-Applikation und XAML-Browser-Applikation (XBAP).

Windows-Applikation

Die Windows-Applikation ist Fensterbasierend und Windows Forms am ähnlichsten. Man erstellt SDI und MDI Applikationen und verschiedene Formulare können über einen Menü-Link direkt angewählt und geöffnet werden. Für Navigation oder Historien ist von Hause aus nichts implementiert. Man muss hier selbst Hand anlegen.

Navigations-Applikation

Unterstützt die Entwicklung von seitenbasierten Anwendungen und ist dem der Webentwicklung sehr ähnlich. Man verfügt über Vor- und Zurück Funktionalitäten und der automatisierten Speicherung der aufgerufenen Seiten in einem Journal. Im Gegensatz zur Webentwicklung, muss die Applikation kompiliert werden und läuft unter Windows, man hat aber vollen Zugriff auf die Ressourcen des Betriebssystems, wie das File-System und/oder der Registry.

XAML-Browser-Applikation

XBAPs verfügen, ähnlich einer Navigations-Applikation, über die Navigations- und Journalfunktionalitäten. Eine XBAP-Applikation kann auf einem Server oder einer Website veröffentlicht werden und werden bei der Instanziierung heruntergeladen. Mit einer XBAP hat man beschränken Zugriff auf die Ressourcen des Computers und man kann weder auf das Filesystem, noch auf die Registry zugreifen.
Die Wahl des entsprechenden Applikations-Typen hängt von verschiedenen Faktoren ab. Die beiden wichtigsten wären, User Experience und spezielle Anforderungen an die Applikation.

User Experience

Möchte man beispielsweise eine seitenbasierte Anwendung oder einen Wizard erstellen, sollte die Wahl auf den Navigations-Typen, oder je nach Anforderung (Zugriff) auf den XBAP-Typen fallen.
Für das Deployment macht sich eine XBAP Applikation recht komfortabel. Man veröffentlicht die Applikation auf einen Webserver und via Hyperlink kann die Applikation gestartet werden. Applikations-Update Mechanismen sind innerhalb einer XBAP-Applikation ebenfalls recht gut umgesetzt.

Anforderungen

Wenn die Anwendung es erfordert, dass man auf das Filesystem zugreifen, oder Einträge in der Registry verwalten muss, sollte man auf alle Fälle eine der beiden ersten Typen wählen.
Egal für welchen Typen man sich entscheidet. WPF unterstützt für alle dieser Typen Möglichkeiten für das Theming und Styling. Auch für Lokalisierung hat man entsprechenden Support, jedoch lange nicht diesen, wie man das von Windows Forms her gewohnt ist. Hier bedarf es eine etwas längere Entwicklungszeit.

Interoperabilität

In WPF fehlen leider auch einige Controls, wie beispielsweise die FileDialog-Klassen für OpenFileDialog und SaveFileDialog. Man ist aber in der Lage, die Windows Forms Assembly (System.Windows.Forms) in einer WPF Applikation einzubinden und die o.g. Klassen stehen einem danach zur Verfügung.
Es ist aber nicht ratsam diesen Weg zu gehen, da es hier zu Namenskonflikten mit Klassen in WPF kommen kann. Empfehlenswert ist der Zugriff über den Microsoft.Win32 Namespace in der PresentationFramework Assembly.
Aber auch den ColorDialog, den FontDialog und anderes findet man vergebens in WPF. In der folgenden Übersicht Windows Forms Controls und  äquivalente WPF Controls bekommt man eine Vergleichstabelle, welche Forms-Controls in WPF nicht vorhanden sind. Auch einige Properties unterscheiden sich, hier sollte man sich Windows Forms and WPF Property Mapping zum Vergleich anschauen.
Nun, wenn man sich für eine Technologie entschieden hat, kann man dennoch beide miteinander kombinieren. Das heißt, man hat entsprechende Controls, um die jeweils andere Technologie einzubinden. In Windows Forms ist das das ElementHost-Control und in WPF das WindowsFormsHost-Control. Einige HowTos zum Verwenden der Controls findet man direkt im MSDN (ElementHost,WindowsFormsHost).
Also, welche Faktoren spielen bei der Wahl zwischen Windows Forms und WPF eine Rolle? Hier ein paar Fragen, um die richtige Technologie, oder den Technologietypen zu ermitteln.
  1. Wie stark sind die Fähigkeiten der Entwickler in der jeweiligen Technologie?
  2. Können durch den Entwickler fehlenden Forms-Controls ersetzt werden?
  3. Verfügt man über Grafik-, oder UI-Designer?
  4. Welche Unterstützung von Styling und Theming wird in der Applikation erwartet?
  5. Soll die Applikation individuell gestaltet sein?
  6. Benötigt die Applikation volle Rechte auf das Betriebssystem?
  7. Wird großer Wert auf eine Seitennavigation ähnlich einer Website gelegt?
  8. Muss die Applikation mehrsprachig sein?

Fazit

Mit WPF ist man in der Lage, grafisch hochwertige Applikationen zu entwickeln. Es fehlen zwar einige Controls, jedoch ist man in der Lage einen passenden Ersatz zu finden, bzw. in der Lage diesen zu entwickeln. Weiterhin kann durch die Trennung von UI und Logik, die Applikation in einem Team aus Developer und Designer entwickelt werden. Durch die Einteilung in verschiedenen Typen, kann man den richtigen Typen für die jeweilige Aufgabe finden und erhält Unterstützung für nahezu jede Anforderung vom Framework.
Ich hoffe dieser kleine Überblick von Vor- und Nachteilen der beiden GUI Technologien hilft dabei, sich für die richtige Technologie zu entscheiden.
Viel Spaß beim entwickeln : )

Sind Microsoft GUI Entwickler unter euch? Welches Framework bevorzugt ihr?
Und warum?
- the incredible Leitman

Keine Kommentare: