Web- und Software Development

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

Written By: Mario Priebe - 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-Applikation, Navigations-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 : )

BASTA! on Tour & SharePoint Summit 2012

Written By: Mario Priebe - Mrz• 25•12

BASTA! on Tour – Architecture & Good Practices – Das große Trainingsevent für .NET-Architekturen

Basta_On_Tour_banner_Statisch_140x140_v3Am 25. bis 27. April 2012 startet in Köln die nächste Ausgabe der BASTA! on Tour – Architecture & Good Practices. Das große Trainingsevent bietet eine Vertiefung von wichtigen Themen der BASTA! – der größten unabhängigen .NET-Konferenz im deutschsprachigen Raum. Entwickler und Softwarearchitekten lernen in insgesamt 15 Workshops die professionelle Gestaltung von Architekturen mit WPF, WCF, ADO.NET Entity Framework, Silverlight, mobilen Anwendungen und Windows Azure! Beleuchtet werden dabei auch oft vernachlässigte Leistungs- und Sicherheitsfragen. Fünf der bekanntesten deutschsprachigen .NET-Experten – Dr. Holger Schwichtenberg, Jörg Neumann, Christian Wenz, Christian Weyer und Manfred Steyer – vermitteln tiefgehend, wie .NET-Anwendungen optimal geplant, realisiert und zu einem erfolgreichen Abschluss gebracht werden, welche Stärken und Schwächen die verschiedenen Technologien haben und wie bei der Auswahl einer geeigneten Architektur vorgegangen werden sollte. Alle Infos auf http://www.basta-on-tour.de

SharePoint Summit 2012

SPS_2012_Webbanner_140x140_v2Am 25. bis 27. April 2012 startet in Köln der nächste SharePoint Summit, der vom SharePoint Magazin und der Entwickler Akademie präsentiert wird. In diesem großen Trainingsevent vermitteln fünf der bekanntesten deutschsprachigen SharePoint-Experten – Andreas Aschauer, Thorsten Hans, Jörg Krause, Mario Meir-Huber und Bernd Pehlke – die wichtigsten Microsoft-SharePoint-Themen in kompakter und intensiver Form. Teilnehmer können aus insgesamt 12 Power Workshops Ihre individuellen Schwerpunkte auswählen. Der SharePoint Summit richtet sich an Softwareentwickler und -architekten, die einen tiefen Einblick in die professionelle Entwicklung mit Microsoft SharePoint erhalten möchten. Das Programm ist in fünf Tracks aufgeteilt: Start-up SharePoint, Start-up SharePoint WebParts, SharePoint UI, Integrating SharePoint und Business Process Management. Einsteiger ebenso wie erfahrene Entwickler und Softwarearchitekten profitieren von einer Fülle an erstklassigem Know-how und Best Practices. Alle Infos auf www.sharepoint-summit.de

Liste von Strings mittels Entity Framework speichern

Written By: Mario Priebe - Mrz• 15•12

Wenn man eine Liste von Strings in die Datenbank mittels Entity Framework (4.2) speichern möchte, muss man entweder eine extra Klasse dafür erstellen, oder sich mit folgendem Workaround behelfen.

public string Staatsangehoerigkeit { get { return Staatsangehoerigkeiten != null ? String.Join(";", Staatsangehoerigkeiten) : null; } set { Staatsangehoerigkeiten = value.Split(';').ToList(); } } [NotMapped] public List<String> Staatsangehoerigkeiten { get; set; }

 

Viel Spaß beim entwickeln : )

Basta Spring 2012 – Ticket für Kurzentschlossene

Written By: Mario Priebe - Feb• 22•12

Achtung, ich habe für den ersten Kurzentschlossenen eine Freikarte zur Hauptkonferenz. Dieses findet vom 28.02.-01.03. im Rhein-Main Hotel in Darmstadt statt .

Wer ernsthaftes Interesse hat, hin zu fahren, sollte sich bitte bei mir melden. Checkt das aber vorher mit Eurem Arbeitgeber ab, nicht das ich das Ticket halte und dann klappt es nicht und ein anderer guckt in die Röhre.

Dazu einfach ein Kommentar hinterlassen, oder per DM auf Twitter (MarioPriebe) oder auf G+.

Das Ticket wird dann am Empfang hinterlegt.

image