Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler...

83
Masterarbeit Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente Zur Erlangung des akademischen Grades eines Master of Science - Media Processing and Interactive Services - Fakultät Informatik Referent: Prof. Dr. Oliver Braun Korreferent: Dipl.-Mathematiker Michael Otto eingereicht von: Ronny Schleicher Matr.-Nr. 290723 Obertor 6 98590 Roßdorf Schmalkalden, den 24.09.2011

Transcript of Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler...

Page 1: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Masterarbeit

Entwicklung einer Windows Phone 7Applikation unter Verwendungmoderner imperativer undfunktionaler Sprachelemente

Zur Erlangung des akademischen Grades einesMaster of Science- Media Processing and Interactive Services -

Fakultät InformatikReferent: Prof. Dr. Oliver BraunKorreferent: Dipl.-Mathematiker Michael Otto

eingereicht von:Ronny SchleicherMatr.-Nr. 290723Obertor 698590 Roßdorf

Schmalkalden, den 24.09.2011

Page 2: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Zusammenfassung

Mit dem Windows Phone 7 bietet Microsoft eine neue Smartphone-Generation an,die sich von den bisherigen Konzepten der Windows Mobile Serie komplett unter-scheidet. Der Schritt von ehemals fast reinen Businessgeräten, die bis auf wenigeAusnahmen selten den Weg zum Endkunden gefunden haben, hin zu Consumer-Geräten für den einfachen Benutzer, und damit einem sehr viel breiterem Markt-segment, scheint damit vollzogen.Bei solch einem Kurswechsel ist es nicht nur nötig die Hard- und Software endkun-denfreundlich zu gestalten. Auch ein neues Entwicklungskonzept für Anwendungs-software muss dabei Bestandteil des Kurswechsels sein. Das ist mit dem WindowsPhone 7 passiert.In dieser Arbeit wird das Entwicklungskonzept des Windows Phone 7 im Bereichgebotenen der Hard- und Software untersucht. Ein Schwerpunkt ist das Prüfen derVerfügbarkeit und Anwendbarkeit moderner imperativer und funktionaler Sprach-elemente. Diese Konzepte werden in dieser Arbeit untersucht und vorgestellt.Um bei der Analyse der durch das Windows Phone 7 und dessen Software gebotenenEntwicklungsmöglichkeiten den praktischen Nutzen zu prüfen, wurde im Rahmendieser Arbeit eine Windows Phone 7 Applikation entwickelt, die einen Cloud-Serviceder FH-Schmalkalden nutzt. Im Rahmen dieser Entwicklung wurden die imperativeund funktionaler Sprachelemente nicht nur theoretisch analysiert, sondern auch ineinem praktischen Kontext eingesetzt, um sich ein ganzheitliches Bild des WindowsPhone 7 in Bezug auf Aspekte der modernen Softwareentwicklung zu verschaffen.

Page 3: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Danksagung

Zu allererst möchte ich den Personen meiner Arbeitsgruppe danken, die mit mir dasGemeinschaftsprojekt FHS-Spirit bearbeitet haben.Benjamin Lüdicke, der sich für den REST-Service verantwortlich zeigte und vieletolle Ideen und Möglichleiten einbrachte, um unsere gemeinsame Aufgabe zu reali-sieren.Florian Schuhmann, der den Web-Service bearbeitete und darüber hinaus noch vieleandere Aufgaben übernahm, wie das Erstellen der Latex-Vorlage, die in dieser Arbeitverwendet wurde.Sebastian Stallenbergen, der im Bereich der Android-Applikation tätig war und mitdem gerade die Fragestellungen zu mobilen Endsystemen, die auch Bestandteil mei-ner Arbeit waren, diskutiert und gelöst werden konnten.

Danken möchte ich ebenfalls dem Referenten der Arbeit, Prof. Dr. Oliver Braun, dermit seinem Sprit-Projekt diese Arbeit erst möglich machte, immer für neue Ideenoffen war und für Fragen und Probleme jederzeit als Ansprechpartner zu Verfügungstand.Dipl.-Mathematiker Michael Otto möchte ich dafür danken, der es als Korreferentdiese Arbeit betreute und sich im Bereich der Server-Komponenten sehr für dasProjekt eingesetzt hat.

Abschließend möchte ich noch bei meiner Familie, also meiner Frau Stefanie undmeinem kleinen Sohn Alexander bedanken, die mit mir gemeinsam die vier arbeits-reichen Semester des Masterstudiums überstehen mussten und denen oft gemeinsameZeit gefehlt hat.

Page 4: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Inhaltsverzeichnis

1 Einleitung 11.1 Prämissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

2 FHS-Spirit Projekt 32.1 Entwicklungsgeschichte des FHS-Spirit Teilprojektes . . . . . . . . . . 32.2 Projektverlauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.3 Leitungsmerkmale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42.4 Anforderungsbeschreibung der mobilen Applikationen . . . . . . . . . 5

3 Windows Phone 7 63.1 Was ist ein Windows Phone 7? . . . . . . . . . . . . . . . . . . . . . 6

3.1.1 Metro-Design . . . . . . . . . . . . . . . . . . . . . . . . . . . 73.1.2 Cloud-Computing und Cloud-Services . . . . . . . . . . . . . . 73.1.3 iPhone und Windows Phone 7 . . . . . . . . . . . . . . . . . 83.1.4 Android und Windows Phone 7 . . . . . . . . . . . . . . . . . 93.1.5 Windows Phone 7 Kernel . . . . . . . . . . . . . . . . . . . . . 9

3.2 Hardwarevoraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . 103.3 Technologien zum Entwickeln mit Windows Phone 7 . . . . . . . . . 13

3.3.1 Silverlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133.3.2 XNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143.3.3 Eingesetzte Technik für die Spirit Applikation . . . . . . . . . 14

3.4 Unterstützte Sprachen und Technologie . . . . . . . . . . . . . . . . . 143.4.1 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4.2 Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4.3 F# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4.4 LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153.4.5 Gemischtsprachige Programmierung . . . . . . . . . . . . . . . 173.4.6 Eingesetzte Sprachen für die Spirit Applikation . . . . . . . . 17

3.5 Verfügbare Entwicklungsumgebungen . . . . . . . . . . . . . . . . . . 173.5.1 Microsoft Visual Studio 2010 . . . . . . . . . . . . . . . . . . . 173.5.2 Microsoft Expression Blend 4 . . . . . . . . . . . . . . . . . . 183.5.3 Alternative Entwicklungsumgebungen . . . . . . . . . . . . . . 193.5.4 Verwendete Entwicklungsumgebungen für die Spirit-Applikation 19

4 WP7 Spirit Applikation – Backend 214.1 Netzwerkkommunikation - Datenformate und Protokolle . . . . . . . 21

4.1.1 REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Ronny SchleicherIV

Page 5: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Inhaltsverzeichnis Fachhochschule Schmalkalden SS 2011

4.1.2 JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214.1.3 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224.1.4 Verwendetes Datenformat in der Spirit Applikation . . . . . . 22

4.2 Möglichkeiten der Umsetzung der REST-Schnittstelle . . . . . . . . . 224.2.1 WebClient-Klasse . . . . . . . . . . . . . . . . . . . . . . . . . 224.2.2 HttpWebRequest-Klasse . . . . . . . . . . . . . . . . . . . . . 244.2.3 Eingesetzte Technik in der Spirit Applikation . . . . . . . . . 27

4.3 Verarbeitung der JSON Daten . . . . . . . . . . . . . . . . . . . . . . 284.3.1 Bibliotheken zur Verarbeitung von JSON . . . . . . . . . . . . 284.3.2 C# und JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 294.3.3 F# und JSON . . . . . . . . . . . . . . . . . . . . . . . . . . 304.3.4 Linq to JSON . . . . . . . . . . . . . . . . . . . . . . . . . . . 304.3.5 Eingesetzte Technik in der Spirit Applikation . . . . . . . . . 30

5 WP7 Spirit Applikation – Frontend 315.1 UI Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

5.1.1 Design-Steuerelemente . . . . . . . . . . . . . . . . . . . . . . 325.1.2 Bildschirmorientierung . . . . . . . . . . . . . . . . . . . . . . 345.1.3 Eingesetzte Techniken in der Spirit Applikation . . . . . . . . 35

5.2 XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355.2.1 XAML in Silverlight und dem Windows Phone 7 . . . . . . . 355.2.2 Markup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2.3 Code-Behind . . . . . . . . . . . . . . . . . . . . . . . . . . . 375.2.4 Ergebnis Markup und Code-Behind . . . . . . . . . . . . . . . 385.2.5 Verwendeten Techniken in der Spirit Applikation . . . . . . . 39

5.3 XAML und Datenrepräsentation . . . . . . . . . . . . . . . . . . . . . 395.3.1 UI-Elemente und Code-Behind . . . . . . . . . . . . . . . . . 395.3.2 UI-Elemente und Modelle . . . . . . . . . . . . . . . . . . . . 395.3.3 Eingesetzte Techniken in der Spirit Applikation . . . . . . . . 40

6 Systementwurf und Implementierung 426.1 Systemübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

6.1.1 Komponentendiagramm der Spirit Applikation . . . . . . . . . 436.2 Implementierung der FHSSpirit-App . . . . . . . . . . . . . . . . . . 45

6.2.1 Elemente der FHSSpirit-App . . . . . . . . . . . . . . . . . . 456.2.2 Funktionsweise der FHSSpirit-App . . . . . . . . . . . . . . . 476.2.3 Pages im Frontend . . . . . . . . . . . . . . . . . . . . . . . . 48

6.3 Implementierung des FHSSpirit-DataControl . . . . . . . . . . . . . 506.3.1 Instanziierung DataControlNews . . . . . . . . . . . . . . . . 506.3.2 Umsetzung der Rest-Schnittstelle . . . . . . . . . . . . . . . . 516.3.3 Verarbeitung der JSON-Daten mit LINQ . . . . . . . . . . . . 52

6.4 Implementierung der Modelle . . . . . . . . . . . . . . . . . . . . . . 576.4.1 Modelle in C# . . . . . . . . . . . . . . . . . . . . . . . . . . 576.4.2 Modelle in F# . . . . . . . . . . . . . . . . . . . . . . . . . . 596.4.3 Fazit zu gemischtsprachigen Modellen . . . . . . . . . . . . . . 60

Ronny SchleicherV

Page 6: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Inhaltsverzeichnis Fachhochschule Schmalkalden SS 2011

7 Bereitstellung 617.1 Bereitstellung im Marketplace . . . . . . . . . . . . . . . . . . . . . . 617.2 Hinweise zur Zertifizierung . . . . . . . . . . . . . . . . . . . . . . . . 617.3 Bereitstellungsformat . . . . . . . . . . . . . . . . . . . . . . . . . . . 627.4 Entwicklungsgeräte . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627.5 Integrierter Trial-Modus . . . . . . . . . . . . . . . . . . . . . . . . . 627.6 Erwerb der Spirit Applikation im Windows Marketplace . . . . . . . 63

8 Ausblicke 648.1 Windows Phone 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 648.2 FHS-Spirit Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

9 Fazit 66

Literaturverzeichnis 67

A Anhang 68A.1 Windows Phone 7 Spirit Applikation als Open-Source Projekt . . . . 68A.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

A.2.1 Zertifikate installieren . . . . . . . . . . . . . . . . . . . . . . 68A.3 Automatischen Test . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68A.4 Benutzerhandbuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69A.5 Mainpage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69A.6 Detailansicht News . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70A.7 Detailansicht Stundenpläne . . . . . . . . . . . . . . . . . . . . . . . 71

B Anhang 72B.1 Eingesetzte Software . . . . . . . . . . . . . . . . . . . . . . . . . . . 72B.2 JSON-Parser mit F# . . . . . . . . . . . . . . . . . . . . . . . . . . . 73

Eidesstattliche Erklärung 77

Ronny SchleicherVI

Page 7: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

1 EinleitungDas Windows Phone 7 wird im Rahmen dieser Arbeit als Entwicklungsplattform füreine prototypische Softwareimplementierung eingesetzt. Dabei werden die gestelltenAnforderungen und deren Realisierungsmöglichkeiten unter Verwendung modernerfunktionalen und imperativen Sprachelemente untersucht.Die Anforderungen an die zu entwickelnde Software kommen aus dem in Kapitel 2beschriebenen FHS-Spirit Projekt und verknüpfen so eine wissenschaftliche Arbeitmit realen Anforderungen eines wirklichen Anwendungsfalls. Somit werden ergän-zende Einblick in die für Softwareentwickler gebotenen Möglichkeiten des WindowsPhone 7 möglich.Zusätzlich wird durch die prototypische Softwareimplementierung untersucht, welcheEntwicklungsumgebungen, Werkzeuge und Fremdsoftware sich für die Umsetzungeignen und welche Technologien sich mit welchem Aufwand auf dem Windows Phone7 einsetzten oder integrieren lassen.

1.1 PrämissenDa es sich bei der zu entwickelten Software um einen Client-Applikation handelt,die mit einem Server kommuniziert, gibt es einige Prämissen, die bei der Umset-zungen der Software beachtet werden müssen. Diese ergeben sich aus dem Projektin Kapitel 2, das in seinem Funktionsrahmen den praktischen Teil dieser Arbeitbeeinflusst.Prämissen der Windows Phone 7 Spirit Applikation im Bezug auf die Client-Server-Kommunikation sind:

• REST als Zugriffsmechanismus für Netzwerk-Ressourcen• generalisiertes REST -Interface für alle Applikationen• XML oderJSON als Datenformat der REST -Schnittstelle• Einsatz von Zertifikaten für die Netzwerkfunktionalität

1.2 HinweiseDie einzelnen Kapitel dieser Arbeit bauen teilweise aufeinander auf. Viele Begriff-lichkeiten in Bezug auf das Windows Phone 7 werden in Kapitel 3 eingeführt undin darauf in den folgenden Kapitel verwendete.

Ronny Schleicher Seite 1 von 77

Page 8: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

1. Einleitung Fachhochschule Schmalkalden SS 2011

Kapitel 6 baut auf den Inhalten und Schlussfolgerungen der Kapitel 4 und 5 auf, indenen Nomenklaturen für Datenformate und Begriffe im Bereich der Softwareent-wicklung für das Windows Phone 7 eingeführt werden. Dieses Kapitels, und auchdie vorherigen beiden Kapitel, setzen Grundkennnisse in der Softwareentwicklungvoraus, da hier wesentliche Dinge zur Implementierung erläutert werden.

1.3 GliederungIm Kapitel 2 wird zunächst das FHS-Spirit Projekt vorgestellt und erläutert, inwelchem Zusammenhang diese Arbeit mit den dort beschriebenen Projekt steht.Im Kapitel 3 wird das Windows Phone 7 aus Benutzer- und Entwicklersicht beschrie-ben. Dabei werden zunächst Hard- und Softwareeigenschaften des Windows Phone7 analysiert und Technologien vorgestellt, die für die Entwicklung von Software fürdas Windows Phone 7 essentiell sind. Hier wird auch ein Überblick auf zur Verfü-gung stehenden Entwicklungsumgebungen gegeben. Ebenso werden imperative undfunktionale Programmiersprachen vorgestellt, die bei der Entwicklung von WindowsPhone 7 Software eingesetzt werden können.Kapitel 4 beschreibt Technologien, die im Windows Phone 7 zu Verfügung stehen,um die prototypischen Anforderungen an die Applikation zu erfüllen. Dabei werdenBasistechnologien untersucht, um die eigentliche Backend-Funktionalität bereitzu-stellen. Schwerpunkte in diesem Kapitel sind die verschiedenen Möglichkeiten derNetzwerkkommunikation und die Verarbeitung der Datenformate. Dabei werden so-wohl die im Windows Phone 7 vorhandenen Technologien und alternativen Ansätzedurch Erweiterungen mit zusätzlicher Fremdsoftware untersucht.Das Kapitel 5 beschreibt ebenfalls Technologien des Windows Phone 7, der Schwer-punkt liegt in diesem Fall allerdings auf der Frontend-Funktionalität. Hier geht esum die Funktionen und Techniken, die zur Umsetzungen der Benutzerschnittstelle,also der eigentlichen Oberfläche des Windows Phone 7, genutzt werden können.Die Umsetzung der Windows Phone 7 Spirit Applikation und somit die konkreteAnwendung der in Kapitel 4 und Kapitel 5 ermittelten Lösungsmöglich findet inKapitel 6 statt. Hier wird der Systementwurf der Windows Phone 7 Spirit Applika-tion vorgestellt und die eigentliche Implementierung erläutert.Kapitel 7 enthält eine Beschreibung zur Bereitstellung von Windows Phone 7 Ap-plikation im Allgemeinen. Hier befinden sich auch Hinweis zu Zertifikaten, Entwick-lungs- und Testgeräten sowie dem Marketplace, in dem Windows Phone 7 Applika-tion erworben werden.In den Ausblicken in Kapitel 8 findet sich eine Ideensammlung für Funktionalitäten,die im Rahmen des Prototypen, der Windows Phone 7 Spirit Applikation, oder desRest-Service noch nicht zur Verfügung standen. Für Weiterentwicklungen sind diedort formulierten Vorschläge aber mit Sicherheit interessant.Im letzten Kapitel 9 findet sich ein Fazit zur gesamten Arbeit und der daraus ent-standenen Windows Phone 7 Spirit Applikation.

Ronny Schleicher Seite 2 von 77

Page 9: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

2 FHS-Spirit ProjektDas FHS-Spirit Projekt ist eine Gemeinschaftsarbeit Studierender der Fachhoch-schule Schmalkalden, die das Ziel hat, das Informationssystem der Fakultät weiterauszubauen, neue Idee umzusetzen und auch Altsoftware durch moderne Technolo-gien, Sprachen und Herangehensweisen zu verbessern.Studenten aus verschiedenen Semestern und Studiengängen versuchen gemeinsametwas dazu beizutragen, entweder durch theoretische Arbeiten, indem bestimmteFragestellungen untersucht und ihre Ergebnisse zugänglich machen, oder praktischedurch Arbeiten, die als Ergebnis konkrete prototypische Implementierungen her-vorbringen, die gegebenenfalls die Grundlage für weitere Arbeiten oder Lösungendarstellen.Im Rahmen zahlreicher Studien-, Bachelor- und Masterarbeiten wird so versucht,Studierenden durch das Arbeiten an einem großen Gemeinschaftsprojekt ein Gefühldafür zu vermitteln, wie Software nicht nur durch den Einzelnen sondern durch eineGemeinschaft immer weiter wachsen und sich weiterentwickeln kann.

2.1 Entwicklungsgeschichte des FHS-SpiritTeilprojektes

Die Grundidee dieses Teil-Projektes war es, einen FHS-Cloud Service zu entwi-ckeln, der die aktuellen Hochschulinformationen zur Verfügung stellt und von ver-schiedenen Plattformtechnologien genutzt werden kann. Diese Plattformtechnologi-en schlossen nicht nur Desktop-Systeme sondern auch aktuelle und zukünftige mobileTechnologien ein, deren Entwicklung ebenfalls Bestandteil des Projektes sein sollte.Bevor es zum eigentlichen Projekt kam, wurden im Vorfeld zunächst Ideen fürServer- und Clienttechnologien zusammengetragen. Bei den Vorschlägen konntensich natürlich auch Studenten beteiligen, die so die Gelegenheit bekamen, eine stu-dentische oder wissenschaftliche Arbeit über ein Projekt anzufertigen, für das siesich selbst interessierten.Nach ca. sechs Monaten fand sich eine Gruppe von vier Studierenden zusammen, diesich bereit erklärte, die Ideen in ihren Masterarbeiten auf Basis wissenschaftlicherArbeiten zu untersuchen und zu beschreiben. Das Ziel war es, neben Formulierungund Bearbeitung der Masterthesis, prototypische Entwicklungen auf den mobilenPlattformen Android und Windows Phone 7, eine Implementierung mit HTML5und serverseitig eine Scala basierte Applikation mit modernen Datenbankmanage-mentsystemen zu erstellen. Alle entwickelten Applikationen sollten im Rahmen derArbeiten als Open-Source zur Verfügung gestellt werden.

Ronny Schleicher Seite 3 von 77

Page 10: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

2. FHS-Spirit Projekt Fachhochschule Schmalkalden SS 2011

2.2 ProjektverlaufBei dem Projekt wurde mit vier Studenten ungefähr drei Monaten lang der Syste-mentwurf, das Datenmodell und die Schnittstellen in gemeinsamen Besprechungenentwickelt, die zwei Mal wöchentlich stattfanden. In der Zeit zwischen den Bespre-chungen galt es meist, technische Fragestellungen zu untersuchen, die sich durch dieAnalyse eingebrachter Vorschläge in den Besprechungen selbst ergaben. In diesenBesprechungen war stets der rege Austausch zwischen den Studenten und dem ver-antwortlichem Professor eine wichtige Basis für das Vorankommen des Projektes.Auch Studenten, die an anderen Projekten im Rahmen von Spirit arbeiteten, nah-men an diesem Besprechungen Teil. Ein Schwerpunkt stellt dabei der Entwurf desgenerischen Datenmodells da, das den Anspruch hatte, auch zukünftige Ideen undFunktionalitäten abbilden zu können.Nach ungefähr einem Monat entwickelte sich von der Idee ein konkreter System-entwurf mit einem Datenmodell, das in den folgenden Besprechungen immer weiterverfeinert wurde. In der zweiten Hälfte der Masterarbeiten begann die Arbeitsgruppemit dem Entwurf und der Implementierung der ersten Prototypen. Auch die Defini-tion der Schnittstelle wurde in dieser Zeit angepasst und in einen Zustand gebraucht,der für die Implementierung der Client-Anwendungen die nötige Funktionalität bot.Im letzten Drittel der Bearbeitungszeit wurde sich verstärkt der Entstehung derjeweiligen Masterthesis gewidmet und die Dokumentation der Schnittstellen wei-ter verfeinert. Die Implementierungen wurden in einen Beta-Status gebracht, derdie Funktionsweise und Einsatzmöglichkeit des Gesamtsystems verdeutlicht und dieInteroperabilität zwischen den unterschiedlichen Technologien hervorhebt.

2.3 LeitungsmerkmaleDas in diesem Projekt entwickelte Informationssystem beinhaltet einen Cloud-Service,der eine Rest-Schnittstelle zum Abfragen und Ändern von Informationen bietet. Die-ser Service stellt die serverseitige Komponente des Informationssystems dar und istmit der Programmiersprache Scala entwickelt. Als Datenbasis dient ein PostgreSQLDatenbanksystem.Außerdem wurde mit dem Lift-Framework ein Web-Service entwickelt, der ebenfallsdie Rest-Schnittstelle nutzt und die Möglichkeiten von HTML5 implementiert. Die-ser Web-Service ist vorwiegend als Schnittstelle für Browser auf Desktopsystemenangedacht.Im Bereich der mobilen Endgeräte wurde je einen Applikation für Android und Win-dows Phone 7 entwickelt. Die Windows Phone 7 Applikation bildet die Grundlagefür diese Arbeit und wurde als das Equivalent zur Adroid-Applikation bearbeitet.

Ronny Schleicher Seite 4 von 77

Page 11: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

2. FHS-Spirit Projekt Fachhochschule Schmalkalden SS 2011

Abbildung 2.1 zeigt in einem Komponentendiagramm noch einmal alle wesentlichenBestandteile des gesamten Projektes mit den wichtigsten Schnittstellen. Deutlich zuerkennen ist, dass der Rest-Service eine zentrale Rolle einnimmt und die Basis füralle andern Applikationen und dem Web-Service bildet.

Abbildung 2.1: Komponentendiagramm mit den Schnittstellen der Systemeuntereinander.

Die grau hinterlegte Komponente bzw. das Endgerät Windows Phone 7 stellt dabeiden Teil dar, der in dieser Masterthesis bearbeitet wurde.

2.4 Anforderungsbeschreibung der mobilenApplikationen

Der Funktionsumfang der mobilen Applikationen und damit auch der Windows Pho-ne 7 Spirit Applikation, die Gegenstand dieser Arbeit ist, besteht aus einer proto-typischen Implementierung zum Empfangen und Anzeigen von fakultätsspezifischenNachrichten und Neuigkeiten. Die Applikation soll also im ersten Schritt in der La-ge sein, Neuigkeiten mit dazugehörigen Kommentaren über die Rest-Schnittstelleabzufragen und in geeigneter Form dem Anwender zur Verfügung zu stellen.Eine Liste mit den Ideen zu Funktionalitäten, die im Rahmen des Projektes ent-wickelt und niedergeschrieben, aber in den Prototypen nicht umgesetzt wurden,befindet sich im Anhang Kapitel 8.

Ronny Schleicher Seite 5 von 77

Page 12: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3 Windows Phone 7Ziel dieses Kapitels ist es, die Ideen und das Entwicklungskonzepte hinter dem Win-dows Phone 7 verständlich zu vermitteln. Neben der eigentliche Frage, was dasWindows Phone 7 eigentlich ist, werden die Hardwarevoraussetzungen des Gerätesbeschrieben und Technologien analysiert, die für die Entwicklung von Software fürdas Windows Phone 7 zur Verfügung stehen. Auch die Programmiersprachen undEntwicklungsumgebungen, die für das Windows Phone 7 in Frage kommen, wer-den beschrieben und auf ihre Verwendungsmöglichkeiten im Rahmen der WindowsPhone 7 Spirit Applikation untersucht.

3.1 Was ist ein Windows Phone 7?Seit dem 21. Oktober 2010 ist das Windows Phone 7 in Deutschland erhältlich undlöste damit die Generation der Windows Mobile 6.x Geräte zwar nicht unmittel-bar, aber in relative kurzer Zeit, vollständig ab. Es handelt sich im Bereich dermobilen Endgeräte, gemäß der Aussage von Microsoft, um eine komplette Neuent-wicklung. Beim Windows Phone 7 ist, im Gegensatz zu den Vorgängerversionen,deren Hauptzielgruppe Businesskunden waren, der Endkunden die Zielgruppe die-ser Gerätegeneration.Neu bei Windows Mobile Geräten ist mit der Einführung von Windows Phone 7 derstarke Focus in Bezug auf Cloud-Computing und Cloud-Services. Ein Ergebnis dieserNeuausrichtung ist unter anderem ein fest im System integrierter Push NotificationService.Aus Entwicklersicht ist die veränderte Art- und Weise, wie mit der Endgeräte-Hardware und den dazugehörigen Schnittstellen im Windows Phone 7 umgegangenwird, ein wirklicher Vorteil. Wo im Bereich der Windows Mobile 6.x Entwicklungaufgrund fehlender Standards noch individuell für jedes Gerät implementiert werdenmusste, sind diese Schnittstellen nun vereinheitlicht.Eine weitere, für Entwickler nicht unerhebliche, Tatsache ist, dass auf dem WindowsPhone 7 keine wirkliche EXE mehr gestartet wird, sondern die Applikationen übereinen Launcher in einer Sandbox gehosted werden. Die vollständige Kontrolle überdas ausgeführte Programm behält damit das Windows Phone 7.Die Änderungen zur Windows Mobile 6.x Generation sind gewaltig, bilden aber dieBasis für eine sehr interessante und neue Entwicklungsplattform mit neuer Zielgrup-pe. Die Ausrichtungen in Sachen Cloud, Multimedia, Benutzerfreundlichkeit undEinfachheit sind gleichzeitig Basis für neue Entwicklungsideen und Anwendungsfäl-le.

Ronny Schleicher Seite 6 von 77

Page 13: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

3.1.1 Metro-Design

Die wohl auffälligste Neuerung beim Windows Phone 7 ist die komplett neue konzi-pierte Benutzeroberfläche. Mit diesem Metro Design entwickelte Microsoft, auch imRahmen der Windows Phone 7 Konzeption, ein Designkonzept für Benutzeroberflä-chen, beim dem, wie der Name schon vermuten lässt, die Informationspräsentationin Flughäfen, U-Bahnen und Bahnhöfen als Inspiration diente. Die Idee, dass dasOberflächendesign Beschilderungen nachempfunden ist, hat das Ziel die eigentlicheInformation, und nicht die Informationspräsentation, als zentrales Element zwischenApplikation und Nutzer zu stellen. Informationen werden dabei als eindeutige Pik-togramme, gut lesbarer Text oder als Kombination von beiden dargestellt.Abbildung A.3 enthält die typischen Benutzeroberflächen des Windows Phone 7 imMetro-Design:

Abbildung 3.1: Metro-Design auf dem Startbildschirm des Windows Phone 7.

Unter[Wil11] sind sogenannten Metro-Design-Regeln für Windows Phone 7 Entwick-ler zu finden, die interessante Hinweise enthalten, wie Oberflächen im Metro-Designimplementiert werden.

3.1.2 Cloud-Computing und Cloud-Services

Der Fokus des Windows Phone 7 liegt auf Cloud-Services und Cloud-Computing.Demzufolge ist es nicht verwunderlich, dass das Windows Phone 7 schon im Auslie-ferungszustand einige fest integrierte Cloud-Dienst enthält.DerWindows-Live-Dienst dient der Synchronisation mit dem Hotmail-Konto und istsomit für E-Mails, Kalender und Kontaktdaten zuständig. Der XBOX-Live-Dienststellt die Verbindung zum Game-Hub sicher, in dem Spiele mit anderen Mitspielerngespielt werden können, die ebenfalls ein X-BOX-Live-Konto besitzen. Außerdemwird ein Live-Avatar zur Verfügung gestellt, der den Mitspieler dort repräsentiert.

Ronny Schleicher Seite 7 von 77

Page 14: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

Der Bing-Dienst dient der schnellen Suche im Internet und der Facebook-Dienststellte die Verbindung zu dem bekannten Sozialen-Netzwerk sicher.Neben diesen Diensten, die aufgrund fehlender APIs1 für Softwareentwickler ehereine untergeordnete Rolle spielen, gibt es noch zwei spezielle Dienste, die für selbstentwickelte Windows Phone 7 Applikation Funktionalität zur Verfügung stellen.

Location-Dienst

Mit dem Location-Dienst können über eine API geobasierte Informationen, alsoPositionsdaten über den aktuellen Standort, abgefragt werden. Somit wird die Mög-lichkeit geboten, diese Daten in der eigenen Windows Phone 7 Applikation zu nutzenund so standortabhängige Funktionalitäten zu entwickeln.

Push Notification Service

Der Push Notification Service ist aus entwicklungstechnischer Sicht eine sehr inter-essante Funktionalität des Windows Phone 7. Er bietet die Möglichkeit, einem selbstentwickelten Web-Service eine URL2 zu schicken, unter der die eigene Windows Pho-ne 7 Applikation erreichbar ist, selbst wenn die Applikation nicht mehr ausgeführtwird.Falls der Web-Service nun Daten an die Windows Phone 7 Applikation übermit-teln möchte, sendet er die Daten nicht direkt nicht an die Applikation, sondern andie entsprechende URI. Diese URI qualifiziert allerdings nicht das Windows Pho-ne 7 oder die Windows Phone 7 Applikation direkt, sondern den Push NotificationService in der Cloud, der eine Nachricht an das entsprechende Windows Phone 7sendet. Anschließend bekommt der Benutzer die Möglichkeit, mit Hilfe der einge-blendeten Nachricht, die entsprechende Windows Phone 7 Applikation, quasi übereine Verknüpfung, sofort zu Starten.

3.1.3 iPhone und Windows Phone 7

Anders als beim iPhone3, bei dem es nur einen einzigen Hardwarehersteller gibt,werden für das Windows Phone 7 verschiedene Geräte unterschiedlicher Herstellerangeboten. Da Apple seine Geräte selber entwirft und produziert, gibt es keine offizi-ellen Hardwareanforderungen. Das ist beim Windows Phone 7 anders. Hier existierteine detaillierte Spezifikation (siehe Kapitel 3.2), die die Hardwareanforderungen de-finieren. Jeder Hersteller, der aus seinen Geräten Windows Phone 7 machen möchte,muss diese Anforderungen erfüllen, um einen Lizenz zur Herstellung zu erhalten.

1API: Application Programming Interface - Programmierschnittstelle2URL: Uniform Resource Locator3http://www.apple.com/de/iphone/

Ronny Schleicher Seite 8 von 77

Page 15: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

Eine Gemeinsamkeit zwischenWindows Phone 7 und dem iPhone besteht darin, dassdas Betriebssystem bei beiden Plattformen nicht geändert oder angepasste werdendarf und somit einen feste und unveränderliche Basis für die Entwicklung von Appli-kationen bietet. Ebenso ist der Zugriff auf sämtliche Sensoren bei beiden Systemenstandardisiert. Außerdem müssen alle Applikationen, die im Windows-Marketplaceoder im App-Store angeboten werden, einen Kompatibilitäts- und Performancetestbestehen, bevor sie für die Installation auf den Endgeräten zugelassen werden. Da-mit soll bei beiden Systemen eine gewisse Qualität der Applikationen sichergestelltwerden.

3.1.4 Android und Windows Phone 7

Der größte Unterschied zwischen Android4 und Windows Phone 7 ist, dass Androidvon den Herstellern ohne jegliche Hardwarebeschränkungen geliefert und verkauftwerden darf. So beschränkt sich der Einsatz von Android nicht nur auf Smartphones,sondern wird auch auf Navigationsgeräten, Table-PC und anderer, größtenteils mo-biler, Hardware eingesetzt. Außerdem ist Android eine komplett offene Plattform,die Softwareanpassungen jeglicher Art, vom Kernel über Sensoren und APIs bis hinzur Benutzeroberfläche erlaubt. Bei Applikationen die im Android Market angebotenwerden, findet deshalb lediglich einen inhaltliche Prüfung statt, da Kompatibilitäts-und Performancetest aufgrund der heterogenen Endsysteme kaum möglich sind.Eine Gemeinsamkeit zwischen Android und dem Windows Phone 7 besteht in dergemischtsprachigen Programmierung (siehe Kapitel 3.4.5) und der Tatsache, dassman bei beiden Endsystemen zwischen verschiedenen Hardwareherstellern wählenkann.

3.1.5 Windows Phone 7 Kernel

Windows Phone 7 ist für Entwickler und Anwender eine Plattform, die komplett auf.NET basiert. Allerdings stellt .NET nicht das eigentliche Betriebssystem dar, son-dern dient als Abstraktionsschicht für Anwendungssoftware. Die Basis für den Ker-nel ist aktuell ein Windows Embedded Betriebssystem mit der genauen BezeichnungWindows Embedded CE 6.0 R3 (3. Oktober 2009), dessen Systemkomponenten, alsoTreiber, DLLs für Netzwerkstacks sowie Audio- und Video-Codec, fast ausschließlichaus nativen C und C++ DLLs bestehen.Ein Auszug zum Thema Windows Phone 7 Kernel von Olivier Bloch5[Blo10]:Windows Phone 7 is based on the Windows Embedded CE kernel – the next genera-tion of the Windows Embedded CE platform will be Windows Embedded Compact 7when released, and the current version is Windows Embedded CE 6.0 R3. AlthoughWindows Phone 7 was built on the Windows Embedded CE kernel at its core, theWindows Phone team has incorporated innovative features and functionality on topof the platform to develop an OS specifically designed to meet the needs of mobilephone manufacturers.

4http://www.android.com/5Olivier Bloch: Technical Evangelist Microsoft Corp.

Ronny Schleicher Seite 9 von 77

Page 16: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

3.2 HardwarevoraussetzungenAnder als bei Android, wo es in Bezug auf die Hardware im Prinzip keine Be-schränkungen gibt, oder beim iPhone, bei dem die Hardware vom Hersteller in denverschiedenen Versionen selbst festgelegt wird, gibt es beim Windows Phone 7 fol-gende fest definierte Hardwarevoraussetzungen, die ein Hersteller mit seinen Gerätenerfüllen muss.

Display

Beim Display wird ein kapazitiver Touchscreen, also eine Screen der mittels elektri-scher Feldstärkemessung die Berührungspunkte ermittelt, mit Multi-Touch-Unter-stützung für mindestens vier Berührungspunkte und einer Auflösung von 800x480Pixel gefordert. Resistive, also druckempfindliche, Touchscreens werden nicht unter-stützt.

Prozessor

Die Mindestanforderung hier ist eine Rechenleitung von 1 GHz. Mehrkernsystemwerden aktuell nicht unterstützt, sind aber Bestandteil der Roadmap künftiger Ver-sionen.

Grafik

Ein DirectX 9 6 kompatibler Grafikchipsatz mit hardwareseitiger Beschleunigung fürDirectX und Direct3D sollen eine flüssige Darstellung der Silverlight-Applikationenund XNA-Spiele gewährleisten und müssen somit vorhanden sein.

Audio

Das Mikrofon und die Lautsprecher inkl. Kopfhöreranschluss müssen über die APIsteuerbar sein. Das integrierte FM-Radio, das allerdings, wie bei Smartphones üb-lich, nur mit angeschlossenen Kopfhörern funktioniert, bietet noch weitere Schnitt-stellen im Audiobereich, die ebenfalls von der API unterstützt werden müssen.

Speicher

Die minimale Größe des Arbeitsspeichers beträgt 256MB, die des Datenspeichers8GB. Eine Erweiterung des Datenspeichers mittel austauschbarer Speicherkarte istnicht vorgesehen.

Tastatur

Die integrieren Software-Tastatur, die unter Windows Mobile 5.x und 6.x auch alsSoft-Input-Panel oder SIP bezeichnet wurde, ist Standard bei allen Windows Phone

6http://msdn.microsoft.com/de-de/directx/

Ronny Schleicher Seite 10 von 77

Page 17: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

7 Geräten. Hardwaretastaturen sind nur als optionale Komponente konzipiert, dielediglich Texteingaben ermöglichen und nicht zum eigentlichen Steuern von Appli-kationen verwendet werden können.

Definierte Gerätetasten

Jedes Windows Phone 7 verfügt mit der Power-Taste, der Taste zur Lautstärkere-gelung und der Kamerataste über drei fest definierte Hardware-Tasten.Die Power-Taste dient, je nach Gerätezustand, zum Ein- und Ausschalten des Bil-derschirms oder des kompletten Gerätes. Die Lautstärketaste Taste reguliert diesystemweiten Gerätelautstärkeregelung. Außerdem kann mit ihr bei eingehendenTelefonaten der Rufton deaktiviert werden. Die Kamerataste wird zur Aktivierungder Kamera verwendet und funktioniert auch bei Bildschirmsperre oder Standby-Mode. Sie muss durch halbes drücken außerdem einen Autofokus unterstützen.Darüber hinaus muss jedes Windows Phone 7 über drei weitere kapazitive Tastenverfügen. Mit der Starttaste gelangt der Anwender immer sofort auf die Startseite,die beim Windows Phone 7 einfach nur als Start bezeichnet wird. Mit der Suchtastewird ein Suchdienst gestartet. Das ist in den meisten Fällen der Bing-Dienst, imMarketplace eine spezielle Marketplace-Suche, in den Kontakten die Personensucheund im E-Mail Bereich ein E-Mai-Suche.Die kapazitive Zurück-Taste nimmt eine besondere Rolle ein. Beim Aktivieren derTaste wird standartmäßig immer die zuletzt angezeigt Seite, auch Page genannt,wiederhergestellt. Somit ist einen Navigation innerhalb einer und zwischen verschie-denen Windows Phone 7 Applikationen möglich. Interessant für Entwickler ist, dassdas Auslösen der Taste in einer Windows Phone 7 Applikation abgefangen werdenkann. Somit ist es möglich, auf das Zurück in der eigenen Applikation entsprechenzu reagieren. Bei einer Client-Anwendung wäre es so möglich, vor dem BeendenAbmelde-Protokolle ausführen oder Daten zu speichern. Allerdings darf eine eige-ne Implementierung der Zurück-Taste das Navigationsmodell des Windows Phone7 nicht behindern oder außer Kraft setzen. Bei den Tests im Rahmen der Freigabeeiner Applikation für den Marketplace wird dementsprechend auch auf ein funktio-nierendes Navigationsmodell geprüft[Mic11b].

Sensoren

Es großes Problem bei der Windows Mobile 5.x und 6.x Generationen war zum einender heterogene Zugriff über die APIs auf die in den Geräten vorhandenen Sensoren,zum anderen die Heterogenität der Sensoren selbst. Beim Windows Phone 7 sinddagegen die enthaltenen Sensoren im Bezug auf ihre Schnittstellen homogen.

Ronny Schleicher Seite 11 von 77

Page 18: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

Folgende Sensoren müssen in jedem Windows Phone 7 vorhanden sein:• Accelerometer: Dient zur Beschleunigungsmessung.• A-GPS: Das Assised Global Position System dient zur Positionsbestimmung.

Neben der herkömmlichen GPS-Funktionalität bietet dieses System auch dieMöglichkeit, eine Standortbestimmung per GPS-Triangulation oder über vor-handene WLAN-Netze mit IP-Lokalisierung durchzuführen.

• Kompass: In der aktuellen Version des Windows Phone 7 ist ein API für denZugriff aus diese Sensordaten nicht enthalten.

• Proximity: Mit dem Näherungssenor wird ermittelt, ob ein Objekt einen Ab-stand vom 15mm zum Sensor unterschreitet. Der Proximity-Sensore findetunter anderem Verwendung um zu ermitteln, ob sich das Gerät bei einemlaufenden Telefonat am Ohr befindet oder nicht. Das System reagiert mit Ak-tivierung bzw. Deaktivierung des Displays.

• Lichtsensor: Dient zur Ermittlung der Stärke des umgebenden Lichtes und wirdzur automatischen Anpassung der Helligkeit des Displays verwendet. Auch hierbietet die API aktuell keine Zugriffsmöglichkeiten.

Kamera

Alle Windows Phone 7 besitzen eine Kamera mit mindestens 5 Megapixeln, einemAutofokus und Blitzlicht. Auch hier gibt es eine API um diese Funktionalität in dereigenen Applikation zu nutzen.

Netzwerkverbindungen

Die Art der aktuell verfügbaren Daten- bzw. Netzwerkverbindung ist für den Ent-wickler, was den Zugriff über die reinen APIs angeht, im Grunde genommen Homo-gen. Trotzdem soll der Vollständigkeit halber erwähnt werden, dass das WindowsPhone 7, genau wie anderer Smartsphones auch, mehrere Arten von Netzwerkver-bindungen unterstützt. Allerdings sieht die API hier vom Ansatz her nicht vor,unterschiedliche Applikationsverhalten bei unterschiedlichen Verbindungsarten zuunterstützen.Die genau verwendeten Datennetztechnologien können, aufgrund regionaler Unter-schiede, tatsächlich von Geräte zu Geräte variieren. Allerdings muss jedes WindowsPhone 7 über die regional übliche Datennetztechnologie und WLAN verfügen.

Einschränkungen

Hinsichtlich der im Windows Phone 7 eingesetzten Hardware und deren Anwen-dungsmöglichkeit gibt es, für Entwickler und für Anwender gleichermaßen, aktuellnoch einige Einschränkungen. Bluetooth erlaubt nur die Verbindung zu einem Head-set. Es ist also nicht möglich Fotos oder sonstige Daten per Bluetooth an andereGeräte zu übertragen. Auch eine Nutzung des Windows Phone 7 per USB als mobilerDatenträger ist vom Hersteller aus derzeit nicht vorgesehen.

Ronny Schleicher Seite 12 von 77

Page 19: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

3.3 Technologien zum Entwickeln mit WindowsPhone 7

Die gesamte Anwendungssoftware, die auf einen Windows Phone 7 ausgeführt wer-den kann, basiert auf dem .NET Compact Framework 3.5 und damit auf ManagedCode. Demzufolge ist es, anders als bei den Vorgängern, nicht mehr möglich, nativenCode auszuführen. Mit XNA und Silverlight werden zwei .NET Technologie bereit-gestellt, die die Windows Phone 7 Entwicklungsparadigmen unterstützen. Hierbeihandelt es sich im Übrigen auch um die einzigen zwei Technologien, die das Entwi-ckeln auf dem Windows Phone 7 ermöglichen.

3.3.1 Silverlight

Silverlight ist imWindows Phone 7 Kontext als Framework zur Anwendungsentwick-lung zu verstehen und löst die bis bisher verwendeten Windows Forms ab. Vorteileund Gründe für den Einsatz von Silverlight gegenüber Windows Forms sind unteranderem[Mic11h]:

• Hierarchische Steuerelementen:Im Gegensatz zu Windows Forms, das die Steuerelemente nur flach darstellenkann, ist es mit Silverlight möglich, Steuerelement zu Gruppieren und hier-archische Darzustellen. Damit wird eine hohe Flexibilität der Steuerelementeerreicht und es sind dynamische Oberflächen, flexible Styles und Layouts mög-lich.

• Grafikdarstellung durch Vectoren:Da Windows Forms auf Pixelbasis arbeiten, ist das skalieren der Oberflächeohne Verpixelung nicht ohne weiteres möglich. Die Darstellung der Silverlight-Elemente erfolgt dagegen auf Vektorbasis und löst somit dieses Problem.

• Animationen:Silverlight unterstützt von Haus aus Animationen, mit denen ansprechendeBenutzeroberflächen für Endanwender erstellt werden können.

• Trennung von Design und Animationen:Eine Trennung von Oberflächengestaltung (Markup), und dem dazugehörigemQuellcode (Code-Behind), ist Bestandteil des Entwicklungsmodells von Silver-light. Die Oberfläche wird dabei in XAML erstellt, während die Funktionalitätin der dazugehörigen Quellcodedatei untergebracht ist. In Kapitel 5.2 wird die-ses Konzept näher beschrieben.

Silverlight wurde von Anfang an als Sandbox7 konzipiert und wird aktuell als Brow-sererweiterung eingesetzt. Dies unterscheidet sich nicht gravierend vom Einsatz ineinem geschlossenen System, wie Windows Phone 7, da auch hier nur die einge-schränkte API des .NET Compact Framework 3.5 zur Verfügung steht und die lau-fenden Applikationen ähnlich eingeschränkte Rechte besitzen.

7http://de.wikipedia.org/wiki/Sandbox

Ronny Schleicher Seite 13 von 77

Page 20: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

Hinzu kommt, dass Silverlight lediglich auf einer Teilmenge der WPF 8 basiert, waswiederum eine gute Voraussetzung für den Einsatz auf nicht so leistungsfähigerHardware, wie der bei Smartphones, ist.

3.3.2 XNA

Das XNA-Framework ist ein fester Bestandteil des Windows Phone 7 und stelltaktuell die Spiele-Plattform dar, die von Entwicklern genutzt wird, um Spiele fürdie XBOX 360 und für das Windows Phone 7 zu programmieren. Allerdings ist dasXNA-Framework nicht als einzelne Bibliotheken-Sammlung erhältlich, sondern istim Lieferumfang des XNA Game Studio 4.0 9 enthalten. Das XNA Gamestudio 4.0ist wiederum eine Erweiterung des Visual Studio 2010 und integriert die nötigenBibliotheken, Dienstprogramme, Projektvorlagen und Dokumentationen in die ei-gentliche Entwicklungsumgebung. Der Programmcode wird also im Visual Studio2010 geschrieben.Im XNA Framework sind alle nötigen Klassen und Bibliotheken enthalten, die nötigsind, um umfangreiche 2D- und 3D-Spiele zu implementieren. Allerdings ist XNAkeine Game-Engine, die ein Design via drag-and-drop ermöglicht. Es stellt vielmehrdie Basis dar, auf der eine solche Game-Engine zu entwickelt werden kann.Außerdem stellt XNA keine Steuerelement und Controls wie z.B. Buttons oder List-Boxes bereit. Falls man Steuerelemente benötigt, müssen diese von Hand implemen-tiert werden. Alternativ dazu ist es möglich, auch vorhandene Bibliotheken fremderQuellen zu nutzen.

3.3.3 Eingesetzte Technik für die Spirit Applikation

In der Windows Phone 7 Spirit Applikation wird Silverlight eingesetzt, da es derpassende Framework für Applikationen ist, die mit Hilfe von Steuerelement undControls Informationen für den Benutzer repräsentieren sollen. Funktionen, mit de-nen man die Stärken von Silverlight im Bereich der 2D- und 3D-Darstellung nutzenkann, sind in den Anforderung an die Windows Phone 7 Spirit Applikation nicht zufinden.

3.4 Unterstützte Sprachen und TechnologieAktuell ist im Lieferumfang des Visual Studios 2010 lediglich C# als Sprache für dieEntwicklung von Windows Phone 7 Projekten enthalten. Allerdings sind mittlerweileein RTW10 für Visual Basic und Online-Projektvorlagen für F# erhältlich, die dasSprachenspektrum erweitern.

8Windows Presentation Foundation9http://msdn.microsoft.com/de-de/library/bb200104.aspx

10Release to Web - Software-Release die per Download zur Verfügung gestellt werden.

Ronny Schleicher Seite 14 von 77

Page 21: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

3.4.1 C#

C# wird in der Version 4.0 unterstützt und ist die mit Abstand am meistens genutz-te Sprache in der Windows Phone 7 Entwicklung. Jede Beispielimplementierung imMSDN ist in C# zu finden und auch die meisten Webcasts11 nutzen diesen Sprachefür Schulungszwecke. Besonders interessant ist, dass gerade die funktionalen Elemen-te dieser Sprache, wie Lambda Ausdrücke, die Einbettung von LINQ und anonymeMethoden, stark in den Vordergrund gestellt werden.

3.4.2 Visual Basic

Überraschenderweise fehlte Visual Basic 2010 für das Windows Phone 7 in der erstenRelease des Visual Studio 2010. Seit Anfang 2011 kann man es als RTW nachinstal-lieren. Auch Visual Basic 2010 profitiert von den funktionalen Elementen des .NETFrameworks. Eine der neuen Funktionen in Visual Basic 2010 ist die Unterstützungmehrzeilige Lambda-Ausdrücke und -Unterroutinen[Mic11f].

3.4.3 F#

Seit Anfang 2011 ist es möglich F# bei der Windows Phone 7 Entwicklung zuverwenden und so eine funktionalen Programmiersprache einzusetzen. Hierfür mussman lediglich die nötigen Online-Projektvorlagen installieren, damit das Visual Stu-dio 2010 die Möglichkeit bietet, diesen Projekttyp anzulegen.Der Trend hin zur funktionaler Entwicklung hat damit seine erste eigene .NETSprache hervorgebracht, die zudem die volle Unterstützung und Funktionalität des.NET Frameworks bietet[Mic11c].

3.4.4 LINQ

LINQ, die Language INtegrated Query, ist eine Abfragesprache, die auf eine beliebi-ge Datenquelle angewendet werden kann. Anders als bei SQL, bei der, bis auf einigeexotische Ausnahmen, immer einen Datenbank die Basis der Abfrage darstellt, mussbei LINQ lediglich ein so genannter LINQ-Provider vorhanden sein, der die Daten-quelle unterstützt. LINQ ist hierbei als einheitliches Datenzugriffsmodell zu sehen,das die Abfrage und Verarbeitung verschiedener Datenmodelle unter Verwendungdes jeweiligen Providers ermöglicht.

Folgende LINQ-Provider sind Bestandteil des .NET Framework:• LINQ to Objects

Findet Verwendung für Collections die IEnumerable implementieren.• LINQ to XML

Zugriff auf XML Strukturen.

11http://www.microsoft.com/germany/msdn/webcasts/default.mspx

Ronny Schleicher Seite 15 von 77

Page 22: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

• LINQ to SQLDie im .NET Framework mitgelieferten Provider arbeiten lediglich mit MS-SQL Servern zusammen. Allerdings sind Provider für andere Datenbanksyste-me wie MySQL, Oracle oder SQLite in Entwicklung bzw. erhältlich.

• LINQ to DatasetBezieht sich auf Daten im einem Dataset[Mic11e].

• LINQ to EntitiesBietet die Möglichkeit Abfragen für konzeptionelle Modelle im Entity Frame-work zu erstellen[Mic11d].

Interessant ist auch, dass Abfragen durch LINQ zum Übersetzungszeitpunkt mit Hil-fe des jeweiligen LINQ-Providers geprüft und optimiert werden. Anders als bei SQLfindet also keine Interpretation des Statements zur Laufzeit statt. Dies ermöglichteine sehr effiziente Verarbeitung der LINQ-Statements im laufenden Programm.

Alternative LINQ-Provider

LINQ stellt dabei keine geschlossenen, auf Microsoft Produkte beschränkte, Tech-nologie dar. Weitere, teilweise noch in der Entwicklung oder dem Beta-Stadiumbefindlichen LINQ-Provider sind unter anderem[Sys07]:

• LINQ to JSON• LINQ to SharePoint• LINQ to Amazon• LINQ to Google• LINQ to Active Directory (LDAP)• LINQ to NHibernate• LINQ to MySQL / Oracle / SQLite• LINQ to Flickr

LINQ und Windows Mobile 6.x

Überaschenderweise ist LINQ für relative viele ehemalige Windows Mobile 6.x Ent-wickler Neuland, obwohl es im .NET Compact Framework 3.5, wenn auch in einge-schränkter Form, bereits vorhanden war. Ursache dafür ist, dass lediglich der .NETCompact Framework 2.0 im Lieferumfang von Windows Mobile 6.x enthalten war.Ein ROM Update der Endgeräte auf den .NET Compact Framework 3.5 in Korre-spondenz mit möglichen Änderungen an der eigenen Software schien den Aufwandgegenüber den Vorteilen, den man sich durch LINQ und anderer neuer Funktionali-tät versprach, nicht zu rechtfertigen.

Ronny Schleicher Seite 16 von 77

Page 23: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

3.4.5 Gemischtsprachige Programmierung

Gemischtsprachig Programmierung, also die Verwendung verschiedener Program-miersprachen in einer Applikation, ist, genau wie beim .NET Framework 3.5, auchmit der Compact-Version einsetzbar und stellt eine interessante Möglichkeit zumEntwickeln von Windows Phone 7 Applikationen dar. So ist es möglich, die Vorteileder einzelnen Sprachen effizient für die zu lösenden Aufgaben in einer Applikationgemeinsam einzusetzen, ohne dass im Zusammenspiel der Sprachen Mehraufwandbeim Entwickeln generiert wird.Gerade im Bezug auf die relative neue funktionale Programmiersprache F# ergebensich hier für Softwareentwickler Chancen, solche Technologien auch in bestehendenApplikationen einzusetzen und bestimmte Programmteile funktional zu implemen-tieren, ohne die komplette Applikation auf ein Sprachenparadigma zu beschränken.

3.4.6 Eingesetzte Sprachen für die Spirit Applikation

In der Windows Phone 7 Spirit Applikation wird gemischtsprachige Programmierungeingesetzt, um die Vorteile von imperativen und funktionalen Sprachen nutzen zukönnen. Der imperative Teil ist mit C# implementiert, da Visual Basic wenigerFunktionalität bietet und keine nennenswerten Vorteile bringt. Die funktionalenTeile werden mit LINQ und F# implementiert. Die Einsatz von LINQ wird imKapitel 4.3 noch einmal begründet. Die Verwendung von F# soll zusätzlich klären,inwieweit sich die neue funktionale Sprache zum Entwickeln von Windows Phone 7Applikation eignet.

3.5 Verfügbare EntwicklungsumgebungenUm Applikationen für das Windows Phone 7 zu entwickeln, werden von Microsoftmit dem Visual Studio 2010 und Expression Blend 4 aktuell zwei Entwicklungsum-gebungen angeboten. Erweiterung für Ecplise12 sind nicht erhältlich. Die Recherchenach alternativen Entwicklungsumgebungen brachte mit derMeme IDE lediglich einErgebnis. Vorgreifend ist deshalb zu sagen, dass Software für das Windows Phone 7aktuell im Grunde nur mit Microsoft-Produkten entwickelt werden kann.

3.5.1 Microsoft Visual Studio 2010

Mit dem Visual Studio 2010 bietet Microsoft für das Windows Phone 7 eine Entwick-lungsumgebung an, die eine sehr gute Integration der benötigten Komponenten bie-tet. Alle nötigen Softwarepakete und Programme, wie Simulator, Remote-Debuggerund Oberflächen-Designer sind verfügbar, um Software für das Windows Phone 7entwickeln zu können. Auch eine sehr detaillierte Hilfe in den EFIGS-Sprachen13

12http://eclipse.org13EFIGS-Sprachen: English, French, Italian, German, Spanish

Ronny Schleicher Seite 17 von 77

Page 24: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

kann lokal installiert oder online genutzt werden. Zusätzlich stehen offizielle Web-Cast und Online-Tutorien zur Verfügung.Die kostenlose Variante Visual Studio 2010 Express Edition14, die für die Entwick-lung von Windows Phone 7 Applikationen prinzipiell ausreicht, wird bereits mitallen nötigen Softwarekomponenten angeboten, so dass eine Nachinstallation zu-sätzlicher Softwarekomponenten hier nicht nötig ist. Bei den kostenpflichtigen Va-rienten15 muss gegebenenfalls das Paket Windows Phone Developer Tools RTW 16

nachinstalliert werden, da der Windows Phone 7 SDK17 zum Release-Zeitpunkt derkommerziellen Versionen noch nicht zur Verfügung stand.Da der Windows Phone 7 SDK, egal ob mit oder ohne Nachinstallation, eine inte-grierte Komponente des Visual Studio 2010 ist, stehen in den kommerziellen Varian-ten alle Online-Updates, Online-Vorlagen und andere Erweiterungen zur Verfügung.Auch Funktionalitäten, wie die Anbindung an den Team Fundation Server18, stai-sche Codeanalyse sowie die integrierten Architektur und Modellierungswerkzeuge,sind für die Windows Phone 7 Projekte nutzbar.

Hinweis zur Verwendung von F#: F# kann aktuell nicht als eine Erweiterung miteinem RTW-Paket, so wie Visual Basic, nachinstalliert werden. Die einzige Möglich-keit, die Spracherweiterungen zu installieren, besteht in der Auswahl einer Online-Projekt-Vorlage, die diese Sprache verwendet. Allerdings stehen in der kostenlosenVariante Visual Studio 2010 Express Edition Online-Vorlagen für Projekte nur einge-schränkt zu Verfügung. Demzufolge ist es nicht ohne weiteres möglich F#-Projektein der Express Edition zu verwenden. F# als Programmiersprache für WindowsPhone 7 kann demzufolge nur für die kostenpflichtigen Varianten des Visual Studio2010, die Online-Vorlagen uneingeschränkt unterstützen, eingesetzt werden.

3.5.2 Microsoft Expression Blend 4

Expression Blend 4 ist keine Entwicklungsumgebung im herkömmlichen Sinne. Eshandelt sich vielmehr um eine Sammlung verschiedener Designwerkzeuge zum Erstel-len von Silverlight Oberflächen. Während das Visual Studio 2010 als Werkzeug fürProgrammierer konzipiert ist, ist Expression Blend 4 eher für Oberflächen-Designergedacht, die keinen oder nur wenig Quellcode schreiben. Expression Blend 4 ist alsoeher mit Adobe Photoshop19 oder Adobe Premiere20 vergleichbar.Als Basis für Expression Blend 4 dienen die gleichen Projekt- und Solution-Dateienwie für das Visual Studio 2010. Somit ist es möglich, und vom Ansatz her auch sogedacht, dass auf einem Projekt mit beiden Werkzeugen und eventuelle auch mitverschiedenen Personen gearbeitet wird. Expression Blend 4 ist in das Visual Studio14http://www.microsoft.com/germany/express/15http://www.microsoft.com/germany/visualstudio/products/features.aspx16http://www.microsoft.com/download17Software Development Kit18http://www.microsoft.com/germany/visualstudio/products/team/visual-studio-team-

foundation-server.aspx19http://www.adobe.com/de/products/photoshop.html20http://www.adobe.com/de/products/premiere.html

Ronny Schleicher Seite 18 von 77

Page 25: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

2010 integriert. Das bedeutet, dass es möglich ist, im Visual Studio 2010 einzelneDateien oder komplette Projekte direkt mit Expression Blend 4 zu öffnen und zubearbeiten.Allerdings ist Expression Blend 4 in keiner Variante kostenlos erhältlich, sondern nurals kostenpflichtige Software separat zu beziehen oder in bestimmten kostenpflichti-gen Varianten des Visual Studio 2010 im Lieferumfang enthalten. Es ist auch nichtdie Aufgabe von Expression Blend 4 den Oberflächen-Designer im Visual Studio2010 zu ersetzen. Oberflächen-Design mit Expression Blend 4 ist im Grunde genom-men eine anderer und sehr leistungsfähige Herangehensweise Silverlight-Oberflächenzu entwickeln. Als Sprache für das Windows Phone 7 wird C# unterstützt, wobeivon Erweiterungen ausgegangen werden kann.

3.5.3 Alternative Entwicklungsumgebungen

Im Bereich alternative Entwicklungsumgebungen für Windows Phone 7 und Win-dows Mobile konnte mit Meme IDE21 lediglich eine Software ausfindig gemacht,die neben den Produkten vom Microsoft eine Entwicklungsumgebung für mobileWindows-Endgeräte zur Verfügung stellt.Die Idee hinter dem Produkt Meme IDE ist cross platform development für mobileApplikationen. Hierbei wird unter Verwendung der Meme IDE mit einer eigenenProgrammiersprache, dem MemeScript, die komplette mobile Applikation entwi-ckelt. Anschließend ist es möglich aus diesem Quellcode lauffähige Applikationenfür Windows Mobile, Android und iPhone zu erzeugen. Es muss also für die Un-terstützung verschiedener mobiler Endgeräte lediglich eine Applikation entwickeltwerden, die unterschiedlich übersetzt und verpackt wird.Leider unterstützt dieser wirklich sehr interessante Ansatz für die Entwicklung mo-biler Applikationen zurzeit nicht Windows Phone 7, sondern nur dessen VorgängerWindows Mobile 6.5. Es bleibt zu hoffen, dass eine Unterstützung für WindowsPhone 7 in der Roadmap fest vorgesehen ist, da zurzeit keine andere Software miteinem vergleichbaren Konzept im Bereich der mobilen Applikationen zu finden ist.Auch eine sehr umfangreiche Dokumentation zur Meme IDE und dem MemeScriptliegt bereits vor. Außerdem gibt es mit MemeCloud auch alternative Ansätze zumDeployment vom mobilen Applikationen.

3.5.4 Verwendete Entwicklungsumgebungen für dieSpirit-Applikation

Bei der Umsetzung der Windows Phone 7 Spirit-Applikation wurde neben demVisual Studio 2010 auch Expression Blend 4 verwendet.Wie unter Punkt 3.5.1 beschrieben, ist das Visual Studio 2010 zurzeit die einzigeEntwicklungsumgebung, die das Implementieren von Windows Phone 7 ermöglicht.Alternativen sind im Prinzip nicht vorhanden.

21http://www.memeapps.com

Ronny Schleicher Seite 19 von 77

Page 26: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

3. Windows Phone 7 Fachhochschule Schmalkalden SS 2011

Expression Blend 4 wurde zum Gestalten der Oberflächen eingesetzt. Obwohl derEinarbeitungsaufwand bei Expression Blend 4 beachtlich sein kann, wenn man mitdieser Art von Software noch nicht gearbeitet hat, sind die Möglichkeiten, die ge-boten werden, enorm. Schnelles Prototypen der Oberflächen in Kombination mitdem Simulator und der guten Vorschau in Expression Blend 4 egalisiert rasch dieEinarbeitungszeit und führt im Bereich der Oberflächengestaltung zu sehr gutenErgebnissen. Viele Entwürfe der Windows Phone 7 Spirit Applikation dieser Ar-beit sind mit Expression Blend 4 entstanden. Auch die finale Oberfläche wurde mitExpression Blend 4 entworfen und anschließend mit dem Visual Studio 2010 imple-mentiert. Gerade die Integration von Expression Blend 4 in das Visual Studio 2010beschleunigt die Design- und Implementierungsarbeit enorm.Allerdings muss erwähnt werden, dass das erzielte Ergebnis auch ohne ExpressionBlend 4 möglich gewesen wäre, da die Spirit-Applikation im Bereich der Oberflächeletztendlich Daten repräsentiert und auf Animationen und Effekte weitgehend ver-zichtet. Doch selbst bei relativ nüchternen Oberflächen erleichtert Expression Blend4 die Gestaltung mitunter erheblich.

Ronny Schleicher Seite 20 von 77

Page 27: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4 WP7 Spirit Applikation – BackendIn diesem Kapitel werden die zur Windows Phone 7 Spirit Applikation nötigenBackend-Technologien vorgestellt und begründet, warum die jeweilige Technik inder Applikation Verwendung findet. Unter Backend wird in diesem Kontext derEmpfang der Daten über Netzwerk, die Datenverarbeitung und die Bereitstellungder Daten für das Frontend in Kapitel 5 verstanden.

4.1 Netzwerkkommunikation - Datenformate undProtokolle

Eine wesentliche Kernfunktionalität bildet die Netzwerkkommunikation zwischendem Cloud-Service und der jeweiligen Client. Der .NET Compact Framework 3.5bietet im Bereich dieser Funktionalitäten verschiedene Klassen, Methoden und Ver-fahren an, die die Verarbeitung erleichtern sollen.

4.1.1 REST

Die Bezeichnung REST, ein Akronym für Representational State Transfer, wur-de in der Dissertation von Roy T. Fielding1 eingeführt und beschreibt einen ei-ne spezielle Softwarearchitektur, die sich durch die zentralen Elemente Ressourcenund Repräsentationen, verteilte Hypermedia-Informationssysteme und einheitlicheSchnittstellen auszeichnet.2 3

REST bildet für den Cloud-Service der FH-Schmalkalden ein zentrales Architektur-merkmal. Jede Client-Anwendung muss in der Lage sein, die dort implementierteREST-Schnittstelle, die auf dem Http-Protokoll basiert, entsprechend der Spezifi-kation zu bedienen.

4.1.2 JSON

Ein bereitgestelltes Datenformat des Cloud-Service ist JSON, die JavaScript ObjectNotation.4 Hierbei handelt es sich um ein sehr kompaktes Datenformat, das indiesem Fall als Container für die eigentlichen Nutzdaten dient. Mit dem Setzen desContent-Type der http Anfrage auf application/json wird das Datenformat für diejeweilige Anfrage auf JSON festgelegt.

1http://www.ics.uci.edu/ fielding/pubs/dissertation/top.htm2http://it-republik.de/jaxenter/artikel/REST—Der-bessere-Web-Service-2158.html3http://de.wikipedia.org/wiki/Representational_State_Transfer4http://de.wikipedia.org/wiki/JavaScript_Object_Notation

Ronny Schleicher Seite 21 von 77

Page 28: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

4.1.3 XML

Neben JSON besteht auch die Möglichkeit, die Daten im XML-Format5 zu empfan-gen. Hierfür muss lediglich der Content-Type der http Anfrage auf application/xmlgesetzt werden. Die empfangene XML-Datenstruktur entspricht vom Inhalt her ge-nau dem, was auch über JSON zurückgeliefert wird.

4.1.4 Verwendetes Datenformat in der Spirit Applikation

In der Windows Phone 7 Spirit Applikation wird JSON eingesetzt, da dieses Formatdie Informationen mit verhältnismäßig wenig Overhead überträgt. Gerade wenn we-nig Bangbreite zur Verfügung steht und bzw. oder keine Datenflat zur Verfügungsteht, was bei Smartphone durchaus der Fall sein kann, ist ein kompaktes Formatzur Datenübertragung immer von Vorteil.Für die interne Weiterverarbeitung ist es aufgrund des Einsatzes von LINQ (sieheKapitel 3.4.4) unerheblich welches Datenformat verwendet wird, da für JSON undXML der jeweilige LINQ-Provider zur Verfügung steht.

4.2 Möglichkeiten der Umsetzung derREST-Schnittstelle

Der .NET Compact Framework 3.5 bietet keine explizite Unterstützung für REST-Schnittstellen an. Allerdings sind mit den im .NET Compact Framework 3.5 ent-haltenen Klassen die nötigen Werkzeuge vorhanden, um einen REST-Schnittstelleselbst zu implementieren. Um mit diesen Klassen in einer Windows Phone 7 Applika-tion einen Web-Request zu erzeugen, und somit Daten von einer REST-Schnittstellezu empfangen, existieren zwei Möglichkeiten, die nachfolgend beschrieben werden.

4.2.1 WebClient-Klasse

Unter Verwendung der Klasse WebClient wird in Listing 4.1 ein asynchroner Web-Request gestartet. In Codezeile 11 wird ein Objekt der Klasse WebClient erzeugt.Anschließend wird in Codezeile 12 das Event OpenReadCompleted abonniert. Dasgeschieht mit Hilfe des += Operator und des EventHandlers OpenReadCompleted-EventHandler. Als Parameter wird dem EventHandler im Konstruktor die MethodeonEventOpenReadCompleted übergeben, die beim Auftreten des abonnierten Eventsgerufen werden soll. Der EventHandler erzeugt hierfür ein Delegate6, um Event umMethode zu verbinden.

5Extensible Markup Language, http://www.w3.org/XML/6Als Delegate bezeichnet man ein Objekt, das einen Zeiger auf Methode kapselt.

Ronny Schleicher Seite 22 von 77

Page 29: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

In Codezeile 13 wird dann der eigentliche Web-Request abgesetzt. Nachdem die an-geforderte Daten vollständig empfangen wurden, wird der Event onEventOpenReadCompleted ausgelöst und demzufolge die Methode onEventOpenReadCompleted ge-rufen, in der das Ergebnis der Anfrage ab Codezeile 20 verarbeitet werden kann.Der Aufruf processData steht hier symbolisch für eine Methode, die die Datenverarbeitet.

Listing 4.1: Web-Request mit C# und der Klasse System.Net.WebClient1 // . . .2 using System . Net ;34 publ ic p a r t i a l c l a s s MainPage : PhoneApp l i ca t i onPage5 {6 // . . .7 Ur i u r i = new Ur i ("http://212.201.64.226:8080/fhs-spirit/

news" ) ;89 pr ivate void r eque s tData ( )10 {11 WebCl ient wc = new WebCl ient ( ) ;12 wc . OpenReadCompleted += new

OpenReadCompletedEventHandler (onEventOpenReadCompleted ) ;

13 wc . OpenReadAsync ( u r i ) ;14 }1516 pr ivate void onEventOpenReadCompleted ( object sender ,

OpenReadCompletedEventArgs e )17 {18 i f ( e . E r r o r == nu l l )19 {20 System . IO . StreamReader s r = new System . IO . StreamReader

( e . R e s u l t ) ;21 // s r b e i n h a l t e t d i e a n g e f o r d e r t e n Daten22 p roce s sData ( s r ) ;23 }24 }25 }

Wichtig ist, dass bei dieser Vorgehensweise das Ergebnis des Web-Requests, alsodie Methode onEventOpenReadCompleted, im Mainthread der Windows Phone 7Applikation ausgeführt wird. Demzufolge ist die Applikation für den Zeitraum, densie für die Verarbeitung der empfangenen Daten in der Methode benötigt, blockiert.Das Sequenzdiagramm 4.1 soll den genauen Ablauf noch einmal verdeutlichen.

Ronny Schleicher Seite 23 von 77

Page 30: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

Abbildung 4.1: Sequenzdiagramm mit dem Ablauf der Kommunikation unter Ver-wendung der Klasse WebClient.

Wenn in der Methode onEventOpenReadCompleted die Menge der zu verarbeitenDaten relativ gering ist und so gewährleistet wird, dass der Mainthread der Win-dows Phone 7 Applikation und somit die gesamte Applikation nicht zu lange blo-ckiert ist, ist dieser Ansatz akzeptabel. Auch ist es möglich, dass das Blockierender Applikation für den Zeitraum der Verarbeitung gewollt ist und mit Hilfe einesProgressbars visualisiert wird. Eine dritte Möglichkeit ist das händische Erzeugen ei-nes Workerthreads in der Methode onEventOpenReadCompleted, der die asynchroneVerarbeitung der Daten im Hintergrund übernimmt. Dies bedeutet allerdings einendirekten Mehraufwand in der Implementierung.

4.2.2 HttpWebRequest-Klasse

Eine andere Möglichkeit, einen Web-Request abzusetzen, bietet die Klasse HttpWe-bRequest. Hier wird das Ergebnis des Web-Request nicht über das EventHandlingbehandelt, sondern mit einem Callback-Mechanismus verarbeitet.

Ronny Schleicher Seite 24 von 77

Page 31: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

Auch hier steht der Aufruf processData symbolisch für eine Methode, die die Datenverarbeitet.

Listing 4.2: Web-Request mit C# und der Klasse System.Net.HttpWebRequest12 using System . Net ;34 publ ic p a r t i a l c l a s s MainPage : PhoneApp l i ca t i onPage5 {6 // . . .7 Ur i u r i = new Ur i ("http://212.201.64.226:8080/fhs-spirit/

news" ) ;89 pr ivate void r eque s tData ( )10 {11 HttpWebRequest wr = ( HttpWebRequest ) HttpWebRequest .

C rea te ( u r i ) ;12 wr . Method = "GET" ;13 wr . Beg inGetResponse ( r e s pon s eCa l l b a c k , httpWebRequest ) ;14 }1516 pr ivate void r e s p o n s e C a l l b a c k ( object sender ,

OpenReadCompletedEventArgs e )17 {18 i f ( e . E r r o r == nu l l )19 {20 WebResponse r e s pon s e = httpWebRequest .

EndGetResponse ( r e s u l t ) ;21 System . IO . Stream stream = re s pon s e .

GetResponseStream ( ) ;22 System . IO . StreamReader s r = new System . IO .

StreamReader ( s t ream ) ;23 // s r b e i n h a l t e t d i e a n g e f o r d e r t e n Daten24 p roce s sData ( s r ) ;25 Di s pa t c h e r . Beg in I nvoke ( _se tLabe lContent , s t r C o n t e n t

) ;26 }27 }28 }

Der wichtigste Unterschied im Vergleich zur Verwendung der WebClient Klasseist allerdings nicht die Tatsache, dass statt des EventHandling-Mechanismus einecallback-Methode mit Hilfe eines Delegates gerufen wird, sondern dass die verwen-detet Callback-Methode responseCallback immer in einem eigenen Workthreadabgearbeitet wird.

Ronny Schleicher Seite 25 von 77

Page 32: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

Daraus folgt, dass die Verarbeitung der empfangenen Daten in der Methode responseCallback() nicht dazu führt, dass der Mainthread der Windows Phone 7 Appli-kation blockiert. Der genaue Ablauf wird im Sequenzdiagramm 4.2 noch einmaldargestellt.

Abbildung 4.2: Sequenzdiagramm mit dem Ablauf der Kommunikation unter Ver-wendung der Klasse WebRequest.

Da die Ausführung der Methode responseCallback und somit auch die Abarbei-tung der empfangenen Daten in einem eigenen Workthread stattfindet, ist ein blo-ckieren des Mainthread bei diesem Ansatz nicht möglich. Es ist in diesem Szenarioalso angedacht, dass die Windows Phone 7 Applikation über das UI7, und damitüber den Mainthread, weiter Eingaben des Benutzers entgegen nehmen kann undim Hintergrund anderer Aufträge in eigenen Workerthreads abarbeitet.Wichtig ist in diesem Zusammenhang auch, dass es nicht möglich ist, aus einemWorkerthread heraus direkt auf UI-Elemente, zum Beispiel List-Boxen oder Edit-Felder, zuzugreifen. Die Ausführung des Zugriffs auf das UI-Element muss immer imMainThread sattfinden. Aus diesem Grund wird von .NET Compact Framework 3.5der Aufruf Dispatcher.BeginInvoke angeboten, der es ermöglicht einen Delegatenasynchron auf dem Thread ausführt, dem der Dispatcher zugeordnet ist. So kannman relative einfach sicherstellen, dass bestimmte Aufrufe auch im richtigen Threadausgeführt werden.

7User Interface

Ronny Schleicher Seite 26 von 77

Page 33: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

Listing 4.3 zeigt eine Beispielimplementierung der Methode processData, die wie-derum die Methode Dispatcher.BeginInvoke einsetzt, um aus einemWorkerthreadheraus ein UI-Elemente zu aktualisieren:

Listing 4.3: Dispatcher.BeginInvoke unter Verwendung des Lambda Operators12 pr ivate void p roce s sData ( System . IO . StreamReader s r )3 {4 // Ve r a r b e i t u ng de r Daten5 // . . .6 Di s pa t c h e r . Beg in I nvoke ( ( ) =>7 {8 // D i e s e r Code w i rd im Mainthread a u s g e f u e h r t9 mainpage . T e x t Ex i t S t a t u s . Text = "Fertig" ;10 }) ;11 }

Im Listing 4.3 wird mit Hilfe des Lambda Operator => der Funktionsblock, der sichrechts vom Operator befindet, und in dem der Code für den Mainthread vorhandenist, als anonyme Methode behandelt. Da dieser Aufruf ohne Parameter ausgeführtwerden soll steht links von Lambda Operator lediglich ().Die Entscheidung, ob eine asynchrone Verarbeitung durch Workerthreads für dieeigene Applikation nötig ist, muss von Fall zu Fall neu Entschieden werden. EinUI, die für den Anwender zwecks Eingaben oder Interaktion immer zur Verfügungstehen muss, ist auf den ersten Blick eine interessante Funktionalität, die allerdingsauch durch das eigentliche Programm richtig behandelt werden muss. Insbesonderebei Mehrfacheingaben durch den Benutzer und laufenden Workerthreads muss dieeigentliche Anwendungslogik dahingehend konzipiert sein und diesen Ansprüchengerecht werden. Für große Datenmengen, die im Hintergrund aufbereitet und erstdann an das UI übergeben werden sollen, ist dieses Modell ein guter Ansatz.

4.2.3 Eingesetzte Technik in der Spirit Applikation

In der Windows Phone 7 Spirit Applikation wird zum Abfragen der Daten die KlasseHttpWebRequest verwendet. Entscheidend dafür ist die Möglichkeit, Daten im Hin-tergrund abzufragen und die lokalen, also clientseitigen, Datenmodelle asynchronzu füllen. Da die Applikation mehrere Seiten besitzt (siehe Kapitel 6.2), bietet sichso die Möglichkeit, einzelne Seiten asynchron zu füllen falls neue bzw. aktualisierteDaten zur Verfügung stehen, ohne dass der Anwender, der eventuell gerade eine völ-lig andere Seite der Windows Phone 7 Spirit Applikation nutzt, eine Unterbrechungseiner Interaktion hinnehmen muss.

Ronny Schleicher Seite 27 von 77

Page 34: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

4.3 Verarbeitung der JSON DatenNachdem die Möglichkeiten des Empfangs der Daten beschrieben wurden, wird nununtersucht, welche Möglichkeiten es mit dem Windows Phone 7 gibt, um die eigent-lichen JSON Daten zu verarbeiten. Im .NET Compact Framework 3.5 sind über-raschenderweise keine Klassen enthalten, die die Verarbeitung von JSON komplettübernehmen oder wenigstens rudimentäre Schnittstellen zum Lesen oder Schreibenvon JSON bieten.

Hinweis: Der in diesem Zusammenhang oft verwendete Namespace8 System.Runtime.Serialization.Json im Assembly System.ServiceModel.Web, lokalisiert inder System.ServiceModel.Web.dll, ist lediglich Bestandteil des im .NET Frame-work 3.5, aber nicht des .NET Compact Framework 3.5, und kann demzufolge indieser Form nicht auf dem Windows Phone 7 eingesetzt werden9.

4.3.1 Bibliotheken zur Verarbeitung von JSON

Die Recherche nach geeigneten Bibliotheken zur Verarbeitung verlief äußert positiv.Nahezu für jede Sprache finden sich Projekte, die es sich zur Aufgabe gemachthaben geeignet Software, und das größtenteils als Open-Source, zur Verfügung zustellen. Als besonders hilfreich erweist sich hier www.json.org, wo eine Übersichtzu mittlerweile fast 50 Sprachen und Frameworks zur Verfügung steht.Für den .NET Framework 3.5 sind die folgende elf10 Klassen und Bibliotheken fürden Einsatz in einer Windows Phone 7 Applikation untersucht worden:

• fastJSON:http://www.codeproject.com/KB/IP/fastJSON.aspx

• JSON_checker:http://www.raboof.com/projects/jsonchecker/

• Jayrock:http://jayrock.berlios.de/

• Json.NET - LINQ to JSON:http://james.newtonking.com/

• JSONSharp:http://code.google.com/p/jsonsharp/

• LitJSON:http://litjson.sourceforge.net/

• JSON for .NET:http://sourceforge.net/projects/csjson/

8Namespaces bzw. Namesräume werden im .NET Framework 3.5 eingesetzte, um Funktionsgrup-pen sinnvoll zu gliedern.

9http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer(v=VS.90).aspx

10www.json.org

Ronny Schleicher Seite 28 von 77

Page 35: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

• JsonFx:http://jsonfx.net/download/

• JsonExSerializer:http://code.google.com/p/jsonexserializer/

• JSON@CodeTitans:http://codetitans.codeplex.com/

• fluent-json:http://code.google.com/p/fluent-json/

Interessanterweise unterstützen von diesen 11 Projekten nur Json.NET - LINQ toJSON und JSON@CodeTitans den im Windows Phone 7 und eingesetzten .NETCompact Framework 3.5 explizit. Ursache dafür ist das Fehler einiger Klassen undNamenspaces im .NET Compact Framework 3.5 , die häufig in den Implementie-rungen eingesetzt werden. Falls die Anzahl der Windows Phone 7 Geräte zukünftigeine größere Rolle spielen sollte, bleibt zu hoffen, dass hier eine größere Sensibilisie-rung im Bereich der .NET Compact Framework 3.5 und den folgenden Versionenstattfindet.Außerdem war es möglich bei einigen Projekten die Implementierung so anzupassen,dass eine Integration in das Windows Phone 7 funktionierte. Allerdings ist einesolche Vorgehensweise meist sehr aufwendig und nicht ohne Risiken. Zuerst mussbei geplanten Änderungen identifiziert werden, welches Lizenz-Modell hinter demOpen-Source-Projekt steht, damit klar ist ob und in welcher Form Änderungen amQuellcode zulässig sind. Falls hier Klarheit besteht muss im nächsten Schritt dieImplementierung des Open-Source-Projektes zu einem großen Teil durchdrungenwerden, um sinnvolle Änderungen an den fremden Quellen vornehmen zu können. Zuguter Letzt kommt es nicht selten vor, dass die Änderungen bei jeder neuen Versiondes angepassten Quellcodes nachgezogen werden müssen, falls sie vom Projektteamder Open-Source-Software nicht berücksichtigt werden. Hier kann somit eine neueFehlerquelle entstehen, die Beachtung finden muss.

4.3.2 C# und JSON

Fast alle Bibliotheken, die es im Bereich JSON für .NET gibt, sind in der Pro-grammiersprache C# entwickelt. Ebenso sind viele Beispielimplementierungen fürJSON-Parser zu finden, die C# nutzen. Oft handelt es sich dabei nicht um richtigeOpen-Source-Projekte, sondern vielmehr um Klassensammlungen, die auf Plattfor-men wie The Code Project11 oder sourceforge12 zu finden sind.

11http://www.codeproject.com12http://sourceforge.net/

Ronny Schleicher Seite 29 von 77

Page 36: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

4. WP7 Spirit Applikation – Backend Fachhochschule Schmalkalden SS 2011

4.3.3 F# und JSON

Viele Implementierungen in F# in Kombination mit JSON-Parsern sind aktuell zwarnoch nicht zu finden, das hat aber weniger mit den Möglichkeiten der Sprache zutun, als vielmehr mit der Tatsache, dass F# einfach noch nicht lange genug existiert,um eine so große Akzeptanz wie die anderen .NET -Sprachen zu erlangen.Durch den funktionalen Ansatz ist es mit F# möglich, sehr kompakte Parser fürJSON zu schreiben. Im Anhang befindet sich in Listing B.1 eine Beispielimplemen-tierung aus einem Blog, die einen funktionierenden JSON-Parser implementiert. Esist davon auszugehen, dass gerade bei der Entwicklung von Parser für Datenformateoder Metasprachen, der Anteil an in F# implementierten Projekten und Bibliothe-ken stark ansteigen wird. Schon jetzt sind auch alternative XML-Parser zu finden,die mit relativ wenig Quellcode realisiert sind und interessante Alternativen zu kom-pletten Bibliotheken bieten.

4.3.4 Linq to JSON

Mit Linq to JSON, also einem Linq-Provider für JSON-Daten, hat man die Mög-lichkeit, LINQ direkt auf JSON-Daten anzuwenden und so mit einer deklarativenSprache, die zusätzlich auch funktionale Elemente bietet, Daten mit einer sehr kom-pakten und eleganten Schreibweise zu verarbeiten.

4.3.5 Eingesetzte Technik in der Spirit Applikation

In der Spirit Windows Phone 7 Applikation wird die Open-Source-Bibliothek Json.NET von James Newton-King13 eingesetzt. In dieser Bibliothek ist ein Klassen-Sammlung für die Kapselung von JSON-Daten in Objekte und Arrays enthalten,die auch die Serialisierung und Deserialisierung vom und in das JSON-Format un-terstützt. Zusätzlich ist ein LINQ to JSON Provider enthalten, der den Einsatz vonLINQ auf die JSON-Daten ermöglicht. Durch den Einsatz dieser Bibliothek wird derImplementierungsaufwand für die Verarbeitung und Auswertung der JSON-Datenerheblich verschlank und eine sehr kompakte Umsetzung, wie Listing 6.8 in Kapi-tel 6.3.3 zeigt, möglich.Die Json.NET Bibliothek ist in allen unterstützen Versionen als Visual Studio 2010Projektdatei erhältlich. Die jeweiligen Projektdateien enthalten alle in Json.NETimplementierten Klassen vollständig und ohne Einschränkungen. Das Übersetzender Projekte lässt sich ohne Probleme durchführen. Abhängigkeiten zu anderen Bi-bliotheken, die nicht Bestandteil der jeweiligen Version des .NET Frameworks sind,gibt es nicht. Zusätzlich stehen auch noch fertig übersetzte Bibliotheken in allenunterstützten Versionen zur Verfügung.

13http://james.newtonking.com/

Ronny Schleicher Seite 30 von 77

Page 37: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5 WP7 Spirit Applikation – FrontendIn diesem Kapitel werden zuerst die technischen Möglichkeiten beschrieben, die dasWindows Phone 7 im Bereich der UI-Entwicklung unter Verwendung von Silverlightbietet. Anschließend werden die jeweiligen Technologien ausgewählt und deren Ein-satz, im Kontext zu den Anforderungen der Windows Phone 7 Spirit Applikation,begründet. Der Begriff Frontend bezeichnet hierbei die Techniken für das eigentli-che User-Interface und schließt die Möglichkeiten, die die UI-Elemente bieten, umsie mit Daten zu füllen, mit ein.

5.1 UI DesignDer Aufbau der Benutzeroberfläche einer Windows Phone 7 Applikation in Kombi-nation mit Silverlight nutzt ein Rahmen- und Seitenmodell, auch Frame- and Page-model, das im wesentlichem der Idee des Silverlight Page Model1 entspricht.Nachfolgend wird nur noch der Begriff Frame- and Page Model verwendet. EinzelneSeiten werden als Pages, und untergeordneten Seiten als Sub-Pages, bezeichnet. Die-se Nomenklatur entspricht den verbreiteten Bezeichnungen in der englischsprachigenMSDN und bekannten Foren, sowie den Bezeichner im .NET Compact Framework3.5 und im Quellcode den Visual Studio 2010 und Expression Blend 4 Projektdatei-en.Der Frame, auf den die Pages dargestellt werden, muss von der Applikation angelegtwerden, um überhaupt Pages anzeigen zu können. In diesen Zusammenhang wirdauch von sogenannten Rootframe gesprochen. Das Erstellen des nötigen Quellcodesübernehmen die Entwicklungsumgebungen Visual Studio 2010 und Expression Blend4, ohne das für Standartapplikation hier Code geändert werden muss.Instanziiert wird der Rootframe in der Methode private void InitializePhoneApplication() in der Datei App.xaml.cs. Wirklich angewendet bzw. genutzt wirder allerdings erste wesentlich später in der Methode private void CompleteInitializephoneApplication(), ebenfalls lokalisiert in der Datei App.xaml.cs, nach-dem die Windows Phone 7 Applikation vollständig initialisiert wurde.Ursache dafür ist, dass beim Initialisieren von Windows Phone 7 Applikation so-lange ein Begrüßungsbildschirm eingeblendet wird, bis die Applikation vollständiggeladen ist. Erst danach wird mit dem Rendering des Rootframes und somit mit derDarstellung der Inhalte begonnen wird. Andersfalls würde man sonst während desLadevorgangs eventuell einen schwarzen Bildschirm oder ähnliche unschöne Dingesehen.

1http://msdn.microsoft.com/en-us/library/cc838245(v=vs.95).aspx

Ronny Schleicher Seite 31 von 77

Page 38: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Wie Abbildung 5.1 zeigt, bildet die Grundlage für das Frame- and Page Model einFrame der als Container für 1-n Pages dient. Durch diese Seiten kann man, angelehntan das Navigieren durchWebseites, vor- und zurückblättern. Auf den einzelnen Pageswerden dann die entsprechenden Inhalte dargestellt.

Abbildung 5.1: Frame- and Page Model [Mic11a] des Windows Phone 7.

Der Rootframe ist hier rot umrandet dargestellt. Die Pages als Inhalt vom Root-frame sind grün umrande dargestellt. Die Darstellung der Pages hintereinander sollnoch einmal die 1-n Beziehung zwischen dem Rootframe zu den Pages verdeutlichen.Allerdings wird in einer laufenden Applikation, mit Ausnahme von speziellen De-signs als Vorschau (siehe Kapitel 5.1.1 fortlaufend), immer nur eine Page komplettdargestellt.

5.1.1 Design-Steuerelemente

Beim Windows Phone 7 wird im Wesentlichen zwischen drei Designs unterschieden,die nachfolgende vorgestellt werden. Alle Designs werden vom Visual Studio 2010und Expression Blend 4 vollständig unterstützt und unterscheiden sich hinsichtlichder Einsatzmöglichkeiten erheblich voneinander.

Ronny Schleicher Seite 32 von 77

Page 39: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Page-Design

Beim Page-Design handelt es sich um das einfachste Design, welches vom WindowsPhone 7 bzw. der Entwicklungsumgebung Visual Studio 2010 angeboten wird. DieDarstellung beschränkt sich hier auf eine Page, die alle relevanten Steuerelementeenthält. Das Page-Design eignet sich besonders für das Erfassen von Nutzereingaben.Das Windows Phone 7 nutzt dieses Design unter anderem, wenn Kurznachrichtengeschrieben werden und im Bereich der Einstellungen bei der Sub-Page zum Ein-stellen der Uhrzeit.

Pivot

Das Pivot-Design besteht aus einer oder mehreren Pages. Durch berühren der Über-schriften oder durch Schiebebewegungen nach links oder rechts kann durch die ein-zelnen Pages navigiert werden. Die Pages befinden sich immer nebeneinander undes wird bei diesem Design nur der Inhalt einer Page angezeigt.Verwendet wird das Pivot-Design bei den meisten Funktionen und Menüs, die dasWindows Phone 7 im Auslieferungszustand bietet. Hier wird sowohl die Variante mitnur einer Page, unter anderem bei der Telefonliste, als auch Varianten mit mehrerenPages, exemplarisch ist hier der integrierten Kalender zu nennen, eingesetzt.

Panorama

Wenn man sich das Panorama-Design betrachtet, sind auf der ersten Blick die Un-terschiede zum Pivot-Design nur schwer zu erkennen. Vor allem wenn in einem neuenVisual Studio 2010 Projekt die beiden Design-Varianten ohne Testdaten betrachtetwerden, ist eine Unterscheidung fast nicht möglich. Beide Design-Varianten stellennebeneinander ein oder mehrere Pages dar. Durch Schiebebewegungen nach linksund rechts ist, wie beim Pivot-Design auch, eine Navigation zwischen den einzelnenPages möglich.Bei einer genaueren Untersuchung der Funktionalität ergeben sich allerdings einigeUnterschiede, gerade im Bereich der verwendeten Bedien- und Visualisierungskon-zeption. Die Navigation zwischen den Pages, die Bestandteil der Panorama-Page ist,ist ausschließlich über die Schiebebewegung möglich und nicht durch das Berührender Überschriften. Auch sind die Überschriften der einzelnen Pages nicht komplettsichtbar und eine Page muss nicht zwangsläufig denn kompletten Darstellungsbereichverwenden. So ist es möglich durch die Schiebebewegungen nach links oder rechtsschon Teile der benachbarten Page anzeigen, ohne komplett auf diese zu wechseln.Es ist also möglich, in dieser Design-Variante den Inhalt von mehr als einer Pagegleichzeitig anzuzeigen.Verwendung findet das Panorama-Design beim Windows Phone 7 im Auslieferungs-zustand unter anderem bei den Kontakten und Bildern. Ebenso sind der Market-place zum Erwerb neuer Software und Musik, sowie der XBOX-Hub zum Erwerbvon Spielen mit dem Panorama-Design umgesetzt. Auch zahlreiche Applikationenanderer Anbieter, die primäre Informationen bereitstellen, verwenden dieses Designals oberstes Steuerelement in der Benutzerführung.

Ronny Schleicher Seite 33 von 77

Page 40: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

5.1.2 Bildschirmorientierung

Das Windows Phone 7 bietet mit Portrait2 und Landscape3 zwei Bildschirmorien-tierungen an, die in jeder Windows Phone 7 Applikation verwendet werden können.Die Standartorientierung für die meisten im Windows Phone 7 integrierten Appli-kationen ist Portrait. Eine Ausnahme bildet das Fotografieren und die Wiedergabevon Videos, wo die Standartorientierung Landscape ist. Ein eher geringer Teil derApplikationen, wie die E-Mail-Verwaltung und der Internet Explorer nutzten beideDarstellungsarten in ihren Oberflächen.Falls eine Applikation beide Bildschirmorientierungen unterstützten soll, muss diesschon zum Entwurfszeitpunkt, egal ob mit Silverlight (Kapitel 3.3.1) oder XNA(Kapitel 3.3.2) gearbeitet wird, beachtet werden. Unter Verwendung des Beschleu-nigungssensors (Kapitel 3.2) wird dafür ein Rotationsschwellwert4 ermittelt, mit des-sen Hilfe die aktuelle Orientierung der Applikation errechnet wird. Das Umschaltender Bildschirmorientierung erfolgt dann automatisch.Silverlight ist vom Ansatz her allerdings so konzipiert, dass lediglich eine Bildschirm-orientierung unterstützt wird. Es ist aber trotzdem möglich mit speziellen Layouts5

und Implementierungsrichtlinien, welche in der MSDN zu finden sind, Applikationenzu entwickeln, die beide Darstellungsarten auf einer Page implementieren.Bei XNA ist die Standartorientierung Landscape, was allerdings im Quellcode perParameter geändert werden kann. Ein Wechsel zwischen den Orientierungen wirdvom XNA-Framework nicht unterstützt und muss komplett von Hand implemen-tiert werden. Hierfür gibt es allerdings Beispielimplementierungen in der MSDN, diegenutzt werden können.

Portrait

Bei der Portrait-Orientierung wird zwischen PortraitUp und PortraitDown unter-schieden. PortraitUp bezeichnet die eigentliche Standartorientierung, bei der sich diekapazitiven Gerätetasten (siehe Kapitel 3.2) an der Unterseite befinden. Dreht mandas Gerät um 180 Grad auf den Kopf entspricht das der PortraitDown-Orientierung.Der Rotationsschwellwert für einen Wechsel von Landscape zu Portrait beträgt 60Grad nach links bzw. rechts. Wenn das Gerät mit Landscape-Orientierung flach aufdem Tisch liegt reicht eine Veränderung von 30 Grad, um einen Orientierungswechselhin zu Portrait auszulösen.

Landscape

Die Landscape-Orientierung unterscheidet intern zwischen LandscapeLeft, wo sichdie kapazitiven Gerätetasten an der rechten Seite des Bildschirms befinden, undLandscapeRight, mit den Tasten an der linken Bildschirmseite.

2Hochformat3Querformat4Grenzwert für die Bildschirmausrichtung in Grad, um von einer Orientierung in eine anderen zuwechseln.

5Umsetzung meist mit einem Grid-Layout.

Ronny Schleicher Seite 34 von 77

Page 41: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Um einen Wechsel von der Landscape-Orientierung zur Portrait-Orientierung aus-zulösen, Beträgt der Rotationsschwellwert von links bzw. rechts ebenfalls 60 Grad.Wenn das Geräte flach auf den Tisch beträgt der Rotationsschwellwert 30 Grad.

5.1.3 Eingesetzte Techniken in der Spirit Applikation

Im Rahmen der Entscheidungsfindung, welche Designs und welche Orientierung fürdie Windows Phone 7 Spirit Applikation am praktikabelsten sind, wurde zunächstApplikationen anderer Anbieter untersucht, die eine ähnliche Funktionalität bieten.Anschließend wurden Prototypen mit Expression Blend 4 implementiert und mitTestdaten gefüllt, um festzustellen, welches Konzept beim Benutzen der Applikationden besten Eindruckt hinterlässt.So kam es zu der Entscheidung, bei der Windows Phone 7 Spirit Applikation als Be-nutzeroberfläche das Panorama-Design mit Portrait-Orientierung einzusetzen. Ur-sache dafür sind die gute Bedienbarkeit und die ansprechenden Gestaltungsmög-lichkeiten des Panorama-Designs. Bei Sub-Pages, und Pages die Benutzereingabenerfordern, wird das unspektakulärere Page-Design angewendet, da hier keine schnelleNavigation zu anderen Pages nötig ist.

5.2 XAMLXAML6 ist eine deklarative Markupsprache. Sichtbare UI-Elemente können im de-klarativen XAML-Markup erstellt und anschließend die UI-Definition mithilfe vonCode-Behind-Dateien, die über partielle Klassendefinitionen an das Markup ge-knüpft sind, von der Laufzeitlogik getrennt werden. XAML stellt die Instanziierungvon Objekten in einem spezifischen Satz von in Assemblies definierten Unterstüt-zungstypen direkt dar. Dieser Ansatz unterscheidet sich von anderen Markupspra-chen, die in der Regel interpretierte werden. XAML ermöglicht das Arbeiten an UIund Logik einer Anwendung zudem mit unterschiedliche Personen und unterschied-lichen Tools.7

5.2.1 XAML in Silverlight und dem Windows Phone 7

Wenn eine Windows Phone 7 Applikation mit Silverlight umgesetzte wird, bein-haltet ein Großteil der Oberflächenentwicklung die Erstellung von XAML-Dateien.XAML dient hierbei als das Format, in dem die in Silverlight verwendetet Ober-flächenbeschreibungssprache abgebildet wird. Zu jeder XAML-Datei gehört bei die-sem Konzept immer eine so genannte Code-Behind-Datei, die die eigentliche Pro-grammlogik enthält. Im MSDN8 wird die eigentlich XAML-Datei alsMarkup und diekorrespondierende Code-Behind-Datei lediglich als Code-Behind bezeichnet. DieseNomenklaturen finden auch in den folgenden Kapiteln Verwendung.

6Extensible Application Markup Language7Quelle: http://msdn.microsoft.com/de-de/library/ms752059.aspx#what_is_xaml8Microsoft Developer Network: http://msdn.microsoft.com/de-de/

Ronny Schleicher Seite 35 von 77

Page 42: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

5.2.2 Markup

Listing 5.1 definiert einen Button, der beim Ereignis Click die Methode buttonClickausführt. Die Methode buttonClick ist im korrespondierenden Code-Behind imple-mentiert, wie Listing 5.2 zeigt.

Listing 5.1: Datei: Page.xaml1 <phone :PhoneApp l i c a t i onPage2 x : C l a s s="WindowsPhoneApplication.Page"3 . . .4 S u p p o r t e d O r i e n t a t i o n s="Landscape" O r i e n t a t i o n="Landscape"5 d :De s i gnHe i gh t="480" d:Des ignWidth="728"6 s h e l l : S y s t e m T r a y . I s V i s i b l e="True">7 <Gr id x:Name="LayoutRoot" Background="Transparent">8 <Button Content="Button" Name="button1" Margin="

150,150,150,150" C l i c k="button1_Click" />9 </ Gr id>10 </ phone :PhoneApp l i c a t i onPage>

Hinweis: Listing 5.1 enthält nur die wichtigsten und zum Verständnis nötigen Ele-mente. Sonstige TAGS zum Definieren von Namensräumen und setzten von zusätz-lichen Attribute sind durch (...) substituiert worden.

Das Attribute x:Class definiert den Klassennamen, SupportedOrientations defi-niert, welche Orientierung von dieser Page unterstützt wird. Als mögliche Werte sind"Landscape", "Portrait" oder "PortraitOrLandscape" anwendbar. Die eigentli-che Orientierung des Bildschirms ist in dem Attribut Orientation="Landscape"festgelegt. Sich gegenseitig ausschließende Kombinationen sind in der Konfigurationnicht möglich. d:DesignHeight="480" und d:DesignWidth="728" legen die Grö-ße der Page fest. Mit tshell:SystemTray.IsVisible="True" wird festgelegt, dassbeim Anzeigen der Page im Hochformat der Statusbar9 dauerhaft eingeblendet wird.Dies kann bei Applikationen, die größere Datenmengen über die vorhandenen Da-tenverbindungen laden müssen, durchaus von Vorteil sein. Mit diesen Attributensind die Umgebungsparameter der Page, die dargestellt werden soll, festgelegt.Der eigentliche Inhalt der Page wird zwischen <Grid und </Grid> beschrieben. Hierwird das sogenannte Root-Layout definiert. Dieses Grid-Layout dient als Basis fürdie UI-Elemente, die in diesen Tag enthalten sind. Das Attribute x:Name="LayoutRoot" definiert den Namen des Layouts und mit Background="Transparent", dassdas Layout einen transparenten Hintergrund hat. Die Zeile <Button ... /> wirdein Button erzeugt dessen Beschriftung durch das Attribute Content="Button" ein-fach auf "Button" gesetzt wird und dessen Objektname mit Name="button1" fest-gelegt wird. Mit Margin="150,150,150,150" wird der Abstand des UI-Elementeszum Rand des korrespondierenden Layouts festgelegt. Das Eingabeformat ist hier

9Visualisiert mit kleinen Symbolen unter anderem die Signalstärke WLAN- und Datenverbindun-gen.

Ronny Schleicher Seite 36 von 77

Page 43: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Abstand linker Rand, Abstand oberer Rand, Abstand rechter Rand, Abstand rechterRand. Im Ergebnis stellt das Markup so eine recht einfache Möglichkeit da, ein UI-Element zentriert dazustellen. Mit Click="button1_Click" wird das Ereignis vonTyp Click mit der Methode "button1_Click" verknüpft, die im entsprechendenCode-Behind in Listing 5.2 lokalisiert ist und in der die Behandlung des Ereignissesimplementiert ist.

5.2.3 Code-Behind

Im Code-Behind des Markups aus Listing 5.1 befindet sich die Implementierung desEvent-Handlers. Als Richtiglinie gilt hier, dass so wenig Quellcode wie möglich in dieeigentliche Code-Behind-Datei geschrieben werden soll. Somit ist das Code-Behindals Bindeglied zwischen der UI und der eigentlichen Programmlogik zu sehen.

Hinweis: Listing 5.2 enthält eine komplett übersetzbare Implementierung der Klas-se WindowsPhoneApplication. Allerdings sind aus platzgründen die nötigen usingAnweisungen durch (...) substituiert worden.

Listing 5.2: Inhalt des Code-Behind in C#.1 using System ;2 . . .3 namespace WindowsPhoneAppl i cat ion4 {5 publ ic pa r t i a l c l a s s Page : PhoneApp l i ca t i onPage6 {7 publ ic Page ( )8 {9 I n i t i a l i z e C o m p o n e n t ( ) ;10 }11 pr ivate void b u t t o n C l i c k ( object sender , RoutedEventArgs e )12 {13 MessageBox . Show("Hello World" ) ;14 }15 }16 }

In Listing 5.2 ist zu sehen, dass der Ereignisname und der Name des zu verwendendenHandlers im Markup angegeben sind (Listing 5.1), während der Quellcode, der denEvent-Handler implementiert, im Code-Behind definiert wird. In Codezeile 5 ist dieKlasse WindowsPhoneApplication zusätzlich mit dem Schlüsselwort partial alspartieller Typ definiert. Das bedeutet, dass sich die Implementierung der Klasse übermehrere Abschnitte verteilen kann und diese in unterschiedlichen Dateien lokalisiertsind. Die Notwendigkeit von partiellen Klassen liegt darin begründet, das neben derImplementierung im Code-Behind auch aus dem Markup Quellcodedateien generiertwerden, die Teile der Implementierung der Klasse WindowsPhoneApplication sind.

Ronny Schleicher Seite 37 von 77

Page 44: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Hier wird auch noch einmal deutlich, dass Markups nicht zur Laufzeit interpretiertwerden, sondern in Quellcode umgewandelt und übersetzt werden. In Codezeile 11beginnt die Implementierung des Event-Handlers der eine Message-Box mit demInhalt Hello World erzeugt.

5.2.4 Ergebnis Markup und Code-Behind

Das Ergebnis der Page.xaml in Listing 5.1 und des dazugehörigen Code-Behind inListing 5.2 zeigen Abbildung 5.3 und Abbildung 5.3 imWindows Phone 7 Emulators,der Bestandteil der Windows Phone 7 Developer Tools ist.

Abbildung 5.2: Screenshot Windows Phone 7 Emulator mit dem erzeugten Button.

Nach Klick auf den in Listing 5.1 definierten Button erscheint die im Event-Handlerin Listing 5.2 implementierte Message-Box.

Abbildung 5.3: Screenshot des Windows Phone 7 Emulator mit Messagebox.

Ronny Schleicher Seite 38 von 77

Page 45: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

5.2.5 Verwendeten Techniken in der Spirit Applikation

Das es im Bereich der UI-Entwicklung mit Silverlight keinen Alternativen zumXAML-Konzept gibt, wird diese Technologie dementsprechend auch in der Win-dows Phone 7 Spirit Applikation verwendet. Trotz der Alternativlosigkeit bei derAuswahl ist dies keine schlechte Entscheidung. Durch die Trennung von Markup undCode-Behind sind selbst Applikationen mit viel Funktionalität und UI übersichtlichzu bearbeiten und mit dem Visual Studio 2010 und Expression Blend 4 stehen zweiaußergewöhnlich gute Werkzeuge zur Verfügung. Auch die Einarbeitung in das docheher umfangreiche Thema, ist durch sehr gute Dokumentation, auch für Entwicklerdie dieses Konzept überhaupt nicht kennen, in der Regel mit einer steilen Lernkurveverbunden.

5.3 XAML und DatenrepräsentationEine immer intensiv diskutierte Frage bei fast alle Softwareentwicklungen ist dieRealisierung der Trennung zwischen UI- und Applikationslogik. Das Windows Pho-ne 7 bietet mit den Konzepten, die in Silverlight enthalten sind, einige interessan-te Möglichkeiten, verschiedene Ansätze zu realisieren. Nachfolgend wird allerdingsnicht auf diverse Entwurfsmuster der Softwareentwicklung eingegangen, die sich mitdiesen Themen sehr ausführlich beschäftigen und für viele Szenarien Lösungen bie-ten. Im Gegensatz zu den fertigen Lösungen der Entwurfsmuster werden nachfolgendlediglich die technischen Möglichkeiten beschrieben, die zur Verfügung stehen, umDaten in dem UI zu repräsentieren und zu manipulieren. Diese technologischen Mög-lichkeiten bieten im Umkehrschluss dann natürlich die Implementierungsgrundlagefür verschiedene Entwurfsmuster, die im Kapitel 6 angewendet werden.

5.3.1 UI-Elemente und Code-Behind

Eine Möglichkeit, die UI-Elemente zu füllen, ist die einfache Implementierung imCode-Behind. Die Elemente, die im Markup definiert werden sind normale Memberin der partiellen Klasse, auf die natürlich auch im Code-Behind mittels getter undsetter zugegriffen werden kann. Diese Vorgehensweise stellt, mit wenigen Ausnah-men, eine sehr statische Lösung dar, die sich bestenfalls für einen kleinen Prototy-pen eignet. Die Prämisse, dass, aus entwurfstechnischer Sicht, das Markup so wenigselbst programmierten Quellcode enthalten sollte wie möglich, wird hier komplettignoriert. Außerdem ist bei diesem Ansatz eine Trennung von UI- und Applikations-logik schwer bzw. gar nicht zu erkennen, da der Quellcode für die Datenverwaltungund der eigentlichen Datenpräsentation in den gleichen Klassen lokalisiert ist.

5.3.2 UI-Elemente und Modelle

Wesentlich effizienter ist das Nutzen von Datenquellen und Modellen. Dabei wird imMarkup eine Datenquelle für ein UI-Element angegeben, die im Code-Behind an ein

Ronny Schleicher Seite 39 von 77

Page 46: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Modell gebunden wird. Unter Modell ist hier ein Klasse zu verstehen, die vom Inter-face INotifyPropertyChanged ableitet ist, einen PropertyChangedEventHandlerimplementiert und mit Hilfe von Properties10 Daten aufnehmen und zur Verfügungstellen kann. Auf Applikationsseite wird nun lediglich das Modell manipuliert, ohnedass ein direkter Zugriff auf die UI-Elemente implementiert werden muss. Besondersbei zusammengesetzten UI-Elementen, die logisch zu einem Modell zusammengefasstwerden können, ist das eine leistungsfähige Technik, um Daten in der UI zu reprä-sentieren und dabei klar zwischen UI- und Applikationslogik zu trennen.Wenn Datenquellen und Modelle im Markup für die UI-Elemente verwendet wer-den, ergibt sich ein weiterer Vorteil. Es ist nun möglich eine weitere Datenquellenanzugeben, die nur zum Entwurfszeitpunkt ausgewertet wird. Das bedeutete, dassdie UI-Elemente, die mit Modell verknüpft sind, schon zum Entwurfszeitpunkt imDesigner des Visual Studio 2010 oder Expression Blend 4 diese Testdaten anzeigen,ohne dass die Applikation vorher übersetzt werden muss. Man entwirft seine Ober-fläche also nicht einfach mit leeren List- oder Combo-Boxen, sondern sieht schonim Designprozess, wie das UI gefüllt mit Daten aussieht. Als Basis für diesen soge-nannte Design-DataContext dient eine XAML-Datei, die, wie eingangs erwähnt, imMarkup der Page definiert werden muss. In dieser Datei werden nun die entspre-chenden Modelle mit Daten gefüllt und dann in der Entwurfsphase vom Designerim Visual Studio 2010 oder Expression Blend 4 verwendet.Allerdings funktioniert der Design-DataContext zum jetzigen Zeitpunkt nicht kor-rekt, wenn die Modell mit der Programmiersprache F# implementiert sind. Ursachehierfür sind Verweise, die vom Interpreter der XAML-Datenquelle seltsamerweisenicht korrekt aufgelöst werden können. Das Problem ist bekannt und es ist davonauszugehen, dass es mit dem nächsten Hotfix bzw. Servicepack behoben wird, dadie Sprache F# im speziellen und die gemischtsprachige Programmierung des .NETCompact Framework 3.5 im Allgemeinen, Aushängeschilder der Windows Phone 7Softwarewareentwicklung sind. Aktuell stellt dieses Problem allerdings eine erheb-liche Einschränkung dar, wenn man mit einem Design-DataContext arbeitet undauch die Werkzeuge wie Expression Blend 4 entsprechend einsetzt.

5.3.3 Eingesetzte Techniken in der Spirit Applikation

Die in der Windows Phone 7 Spirit Applikation eingesetzten UI-Elemente wer-den durch Modelle mit Daten gefüllt und manipuliert. Der Zugriff auf die UI-Elemente findet also über die Modelle in der Applikationslogik statt. Auch derDesign-DataContext findet Verwendung. Da allerdings ein Teil der Modell, sieheKapitel 6.4.2, mit der Programmiersprache F# implementiert ist, funktioniert derDesign-DataContext nur eingeschränkt.

10Membervariablen einer Klassen die mit gettern und bzw. oder settern verfügbar sind.

Ronny Schleicher Seite 40 von 77

Page 47: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

5. WP7 Spirit Applikation – Frontend Fachhochschule Schmalkalden SS 2011

Als Programmiersprache für die Code-Behind-Dateien wird C# verwendet. DerGrund dafür ist, das C# in allen Visual Studio 2010 und Expression Blend 4 Va-rianten unterstützt wird und durch seine Integration eine sehr gut Möglichkeit fürdie Umsetzung von Anforderungen mit beiden Werkzeugen bietet.Für die Modelle können prinzipiell alle .NET Sprachen genutzt werden, die zurVerfügung stehen. Im Hinblick auf moderne funktionale und imperative Sprachenwird für die Modelle F# und C# verwendet. Im Kapitel 6.4.3 findet ein Vergleichder beiden Sprachen in Bezug auf die Implementierung der Modellen statt.Neben der Trennung der Modelle durch Namesräume und verschiedene Sprachenist es natürlich auch möglich, die Modelle in einzelnen DLLs zu separieren. DieseHerangehensweise bietet meist die Grundlage für eine saubere Trennung zwischenden Modellen, der UI und der eigentlichen Applikationslogik. Ringabhängigkeitenfallen sofort durch Fehlermeldungen auf und demzufolge wird die gewünschte Unab-hängigkeit zwischen den einzelnen Programmteilen in hohem Maße gewährleistet. Inder Windows Phone 7 Spirit Applikation sind deshalb nicht nur die Modelle sondernauch die Applikationslogik in eigenen DLLs lokalisiert.

Ronny Schleicher Seite 41 von 77

Page 48: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6 Systementwurf undImplementierung

Dieses Kapitel beschreibt den Entwurf und die Implementierung der Windows Pho-ne 7 Spirit Applikation unter Verwendung der in den Kapiteln 4 und 5 gewonnenErkenntnisse. Das Kapitel gliedert sich in vier Abschnitte. Zunächst wird in Ab-schnitt 6.1 eine Systemüberübersicht über die entwickelte Windows Phone 7 Spi-rit Applikation gegeben. Anschließend wird die Implementierung vom Frontend inAbschnitt 6.2, vom Backend in Abschnitt 6.3 und der Modelle in Abschnitt 6.4beschrieben.

6.1 SystemübersichtNachfolgend wird ein Top-Down-Entwurf der Windows Phone 7 Spirit Applikationdargestellt. Hierbei sollen die implementierten Komponenten und die Interaktionder Komponenten miteinander verdeutlicht werden. Unter Komponente werden indiesem Zusammenhang immer Teile von Software verstanden, die eine logische Zu-sammengehörigkeit besitzen und in einer oder mehreren DLLs lokalisiert sind.Das Windows Phone 7 Spirit Applikation ist vom Systementwurf her in drei Kompo-nenten unterteilt, die in vier DLL implementiert sind. Die Tabelle 6.1 stellt hierbeieine Übersicht über die Komponenten und die in ihnen verwendeten Technologiendar:

Komponente verwend. Sprachen und Techniken Anzahl der DLLs

FHSSpirit-App XAML 1C#

FHSSpirit-DataControl LINQ 1C#

Modelle F# 2C#

Tabelle 6.1: Übersicht über die Komponenten der Windows Phone 7 Spirit Appli-kation mit den verwendeten Technologien.

Die FHSSpirit-App (Abschnitt 6.2) stellt hierbei die umfangreichste Komponen-te dar und beinhaltet das Frontend. Das FHSSpirit-DataControl (Abschnitt 6.3)implementiert das Backend und die Modelle (Abschnitt 6.4) implementieren die ei-gentlichen Datenmodell, die in der Windows Phone 7 Spirit Applikation verwendetwerden.

Ronny Schleicher Seite 42 von 77

Page 49: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

6.1.1 Komponentendiagramm der Spirit Applikation

Das Komponentendiagramm 6.1 zeigt die drei Komponenten der Windows Phone 7Spirit Applikation mit ihren Assoziationen untereinander. Zusätzlich zeigt es nochdrei horizontale Swimlanes1, welche die Interface-Komponenten darstellen, die imAnwendungskontext des Gesamtsystems ebenfalls einen Rolle spielen.

Abbildung 6.1: Komponentendiagramm der Windows Phone 7 Spirit Applikationmit den Interfaces.

1Swimlanes dienen in UML2.0 dazu, organisatorische Zuständigkeiten und Gruppierungen in UMLDiagrammen besser darstellen zu können.

Ronny Schleicher Seite 43 von 77

Page 50: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Swimlane Benutzer

Im oberen Teil in Abbildung 6.1 wird mit der Swimlane Benutzer die Schnittstellezur eigentlichen UI und zum Windows Phone 7 an und für sich dargestellt. Siesoll verdeutlichen, das die Windows Phone 7 Spirit Applikation nicht die kompletteBenutzerinteraktionen, die mit dem Windows Phone 7 möglich sind, implementierthat, sondern lediglich gegen ein Interface entwickelt ist, das vom Windows Phone 7bereitgestellt wird. Gemeint sind hier Benutzeraktionen wie eingehenden Anrufe, dasAktivieren der Kamera oder auch eine vomWindows Phone 7 eingeblendete Meldungfür einen zu schwachen Akkustand und der daraus resultierenden Notabschaltungdes Gerätes.Sämtliche Benutzer- und auch Systemaktionen des Windows Phone 7 sind in derSchnittstelle verallgemeinert, und auf lediglich vier Systemfunktionen reduziert:

• private void Application_Launching(...)Diese Methode wird nur beim Starten, aber nicht beim Reaktivieren der Ap-plikation ausgeführt.

• private void Application_Activated(...)Diese Methode wird beim Reaktivieren der Applikation, also wenn sie wiederin den Vordergrund gebracht wird, ausgeführt. Beim Starten der Applikationwird diese Methode nicht ausgeführt.

• private void Application_Deactivated(...)Diese Methode wird ausgeführt, wenn die Applikation in den Hintergrundgebracht, und somit deaktiviert, wird. Beim Schließen der Applikation wirddiese Methode nicht ausgeführt.

• private void Application_Closing(...)Diese Methode wird beim Schließen der Applikation ausgeführt. Beim Deak-tivieren wird diese Methode nicht ausgeführt.

Das bedeutet im Ergebnis, dass diese vier Schnittstellen implementiert werden müs-sen, falls eine Applikation eine Abarbeitung von Daten oder Protokollen benötig,wenn sie von außen beendet oder deaktiviert wird.Die Windows Phone 7 Spirit Applikation bedient diese Schnittstellen zurzeit miteiner Standartimplementierung und kann jederzeit auch von außen deaktiviert oderbeendet werden.

Swimlane Windows Phone 7 Spirit Applikation

Die SwimlaneWindows Phone 7 Spirit Applikation in Abbildung 6.1 entspricht dem,was die eigentliche Windows Phone 7 Spirit Applikation als Implementierung ent-hält. Zu sehen sind die drei Komponenten FHSSpirit-App, FHSSpirit-DataControlund die Modelle.Die Assoziationen zwischen der FHSSpirit-App und Windows Phone UI entsprichtdem, was in Kapitel 6.1.1 Swimlane Benutzer bereits beschreiben ist. Die Assoziationzwischen den FHSSpirit-DataControl und dem Cloud-Service stellt im Wesentlichendie implementierte Rest-Schnittstelle dar, um Daten anfragen und senden zu können.Zwischen der FHSSpirit-App und dem FHSSpirit-DataControl gibt es ebenfalls eine

Ronny Schleicher Seite 44 von 77

Page 51: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Assoziation, da das Frontend die Benutzerinteraktion als Auftrag an das Backendschickt und das Backend die angeforderten Daten dem Frontend zur Verfügung stellt.Sowohl das Frontend(FHSSpirit-App) als auch das Backend(FHSSpirit-DataControl)müssen die Modelle kennen, da die Modelle direkt im Backend mit Daten gefüllt,anschließend an das Frontend geschickt und dort weiterverarbeitet werden. Deswe-gen besitzen sowohl die FHSSpirit-App also auch das FHSSpirit-DataControl eineAssoziation zu den Modellen. Durch den Einsatz solcher applikationsweiten Daten-modelle entfällt das so genannte Object-Mapping, bei dem Datenstrukturen, die vomeiner Komponente erzeugt werden, für die Verarbeitung in der anderen Komponen-ten erst auf deren interne Daten- und Objektstruktur umgerechnet werden müssen.Da sich im Systementwurf der Windows Phone 7 Spirit Applikation die Model-le separate in einer eigenen Komponente befinden, ist ihre Verwendung im Front-und Backend möglich, ohne dass sich durch ihre Verwendung neue Abhängigkeitenergeben.

Swimlane Cloud-Service

Die unterste in Abbildung 6.1 enthaltenen Swimlane Could-Service steht in ersterLinie für der FHS-Spirit Rest-Service, dessen Interface in dieser Swimlane auch ent-halten ist. Da die implementierte Schnittstelle mit Rest allerdings einem offiziellenStandard entspricht, ist auch eine Kommunikation zu einem anderen Rest-Servicesmöglich. Außerdem soll mit der separaten Swimlane noch einmal verdeutlich wer-den, das zum Gesamtkonzept des Spirit-Projektes auch ein Cloud-Service mit Rest-Schnittstelle gehört, der allerdings ledig über das implementierte Interface mit derWindows Phone 7 Spirit Applikation assoziiert ist.

6.2 Implementierung der FHSSpirit-AppDie FHSSpirit-App DLL bildet das Frontend der Windows Phone 7 Spirit Ap-plikation. Sie enthält die Implementierung der partiellen Klasse public partialclass App : Application, in der der Einstiegpunkt für die Windows Phone 7 Ap-plikation lokalisiert ist. Dies ist mit dem main Einstiegpunkt in anderen Sprachenvergleichbar.Außerdem implementiert sie als Frontend alle Pages mit den dazu nötigen Markupund Code-Behind-Dateien. Sie ist die einzigen DLL, die sowohl mit dem Visual Stu-dio 2010 und Expression Blend 4 bearbeitet wird und dementsprechend generiertenund selbst geschriebenen Quellcode enthält.

6.2.1 Elemente der FHSSpirit-App

Die Elemente, die wie folgt beschreiben werden, entsprechen im Wesentlichen demInhalt der Projektdatei des Visual Studio 2010 bzw. Expression Blend 4 und sollenin Zusammenhang mit der Funktionsweise der Windows Phone 7 Spirit Applikationgebracht werden.

Ronny Schleicher Seite 45 von 77

Page 52: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Klasse App

Die partielle Klasse public partial class App : Application stellt neben demHaupteinstiegpunkt und dem Rootframe auch die statische Zugriffmethode publicstatic MainViewModel ViewModel() bereit. Die Methode hat als Rückgabe dieKlasse MainViewModel, die in der DLL FHSSpirit-DataControl lokalisiert ist unddie Aufgabe hat, die dort enthaltenen Modelle, die letztendlich auch wieder aufKlassendefinitionen beruhen, zu verwalten.

Pages

Die in der Windows Phone 7 Spirit Applikation enthaltenen Pages sind alle in derFHSSpirit-App lokalisiert. Sie bestehen immer aus einen Markup, mit der Nomenkla-tur Klassenname.xaml, und dem dazugehörigen Code-Behind, mit der NomenklaturKlassenname.xaml.cs. Eine besondere Rolle nimmt hier die Klasse MainPage auf diein Kapitel 6.2.2 noch genauer eingegangen wird.

Ressouren

Alle für eine Windows Phone 7 Applikation benötigten Ressourcen, wie verwendeteIcons, Logos und Versionsinformationen, befinden sich in der DLL FHSSpirit-App.Es werden in dieser Applikation keine Ressourcen dynamisch nachgeladen. Alle fürdie Windows Phone 7 Spirit Applikation nötigen Dateien werden unter Verwendungdes Ressourcen-Compilers fest in die Applikation gebunden. Diese Vorgehensweiseerleichtert die Bereitstellungen, die in Kapitel 7 beschrieben ist, erheblich.

SampleData

Die Datei MainViewModelSampleData.xaml enthält Testdatensätze, die zum De-signzeitpunkt angezeigt werden können. Ich Kapitel 5.3.2 werden die Voraussetzun-gen dafür beschrieben. Die Datei kann nach entsprechend ihrer recht einfachen Syn-tax beliebig erweitert werden. Wichtig ist hier, dass die Assemblies korrekt gesetztsind, wenn sich die verwendeten Modelle in anderen DLL befinden.

Listing 6.1: Ausschnitt aus der Datei: MainViewModelSampleData.xaml1 <loca l :Ma inV i ewMode l2 . . .3 xm ln s : x="http://schemas.microsoft.com/winfx/2006/xaml"4 x m l n s : l o c a l="clr-namespace:FHSSpiritDataModels;assembly=

FHSSpiritDataModels"5 . . .6 </loca l :Ma inV i ewMode l>

Abbildung 6.1 zeigt einen Ausschnitt der Datei MainViewModelSampleData.xaml.Von besonderer Bedeutung ist hier Codezeile 4, die den Assembly-Verweis auf dieModelle im FHSSpirit-DataControl enthält und in dieser Datei von Hand eingetra-gen werden muss.

Ronny Schleicher Seite 46 von 77

Page 53: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

6.2.2 Funktionsweise der FHSSpirit-App

Die Funktionsweise der FHSSpirit-App basiert, wie für Silverlight Applikationenauf dem Windows Phone 7 üblich, auf dem einem angepassten MVVM 2 Entwurfs-muster. Eine komplett sauberer Implementierung des MVVM-Entwurfsmusters istaufgrund einiger nicht vorhandener Funktionalitäten, wie Commands, nicht ohneweiteres möglich[Mic09].

Instanzierung

Die FHSSpirit-App instanziiert alle Komponenten, die für die Windows Phone 7Spirit Applikation benötigt werden. Dazu gehört die Klasse MainViewModel, dieals Singleton implementiert ist und selbst alle Modelle instanziiert und verwaltet.Außerdem werden die nötigen Controls instanziierte, die sich in der Komponen-te FHSSpirit-DataControl befinden. Aufrufe, die vom den Objekten im FHSSpirit-DataControl zurück an die FHSSpirit-App gesendet werden müssen, sind mit Dele-gaten realisiert. Somit findet die Kommunikation von der Komponente FHSSpirit-DataControl zur Komponente FHSSpirit-App statt, ohne das die Komponente FHSSpirit-DataControl die Komponente FHSSpirit-App kennen muss.

MainPage

Die Klasse MainPage nimmt in der Funktionalität der Komponente FHSSpirit-Appeine besondere Rolle ein. Im Konstruktor dieser Klasse werden die Delegaten für dasFHSSpirit-DataControl festgelegt, damit die Daten, die das Ergebnis von asynchro-nen Anfragen das FHSSpirit-DataControl sind, vom FHSSpirit-DataControl zurückan die FHSSpirit-App gesendet werden können.

Listing 6.2: Festlegung der Delegaten im Konstruktor der Klasse MainPage1 publ ic p a r t i a l c l a s s MainPage : PhoneApp l i ca t i onPage2 {3 DataContro lNews m_DataControlNews ;4 publ ic MainPage ( )5 {6 . . .7 th i s . m_DataControlNews = DataContro lNews . I n s t a n c e ;8 th i s . m_DataControlNews . m_del_ErrorMessage = th i s .

showEr ro r ;9 th i s . m_DataControlNews . m_del_ResponseNews = th i s .

r esponseNews ;10 . . .11 }12 . . .13 }

2Model-View-ViewModel

Ronny Schleicher Seite 47 von 77

Page 54: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

In Listing 6.2 wird in Codezeile 3 eine Referenz des Typs DataControlNews defi-niert, die in Codezeile 7 mit dem Property Instance auf eine konkrete Instanz derKlasse festgelegt wird. In den Codezeilen 8 und 9 werden zwei Delegaten der Klas-se DataControlNews an die Methoden public void showError(...) und publicvoid responseNews(...) der Klasse MainPage gebunden. Wichtig ist in diesem Zu-sammenhang, das die Parameterlisten der verwendete Methode und des Delegatenidentisch sein müssen.Somit ist es möglich, das die Instanz der Klasse DataControlNews Methoden derKlasse MainPage rufen kann, ohne diese direkt zu kennen.

Binden der Sichten an die Modelle

Die Sichten, oder auch Views, werden im Markup definiert. Hierbei kann es sichum einfache List-Views oder Textfelder handeln, oder auch um selbst definierteUI-Elemente. Die Sichten werden im jeweiligen Markup an die Modelle gebunden.Dies geschieht mit dem Attribut DataContext, wo direkt der Name des Modellesangegeben wird. Die Zuweisung eines Properties aus dem Modell wird dann direktmit dem Output-Property des UI-Elementes verknüpft.

Listing 6.3: Ausschnitt aus einem Markup mit Datenbindung der View.1 <StackPane l>2 <TextBlock Text="{Binding Owner}" "{Binding

Item_CurrentMessage}" />3 </ StackPane l>

Listing 6.3 zeigt den Ausschnitt eines Markups, in dem ein TextBlock definiert wird,der sich auf einem StackPanel befindet. In Codezeile 3 wird die View an ein Modellmit Namen Item_CurrentMessage gebunden und das Property des Modells BindingOwner für den Inhalt der View verwendet. Dateien an die Modelle gebunden.

Ereignissbehandlung

Die Ereignisbehandlung durch Benutzerinteraktionen findet in der Windows Pho-ne 7 Spirit Applikation ausschließlich in den Code-Behind-Datei der jeweilige Pagestatt. In den Eventhandlern, also den Behandlungsroutinen für die verschiedenenEreignisse, werden die Aufrufe anschließend an die entsprechenden Controls überge-ben. Somit ist der Quellcode, der sich in den Code-Behinds befindet, relative einfachund kurz gehalten.

6.2.3 Pages im Frontend

Die in der Windows Phone 7 Spirit Applikation implementierten Pages, die demBenutzer verschiedene Funktionalitäten zur Verfügung stellen, werden in diesemKapitel vorgestellt und die verwendeten Designs mit einer kurzen Beschreibung er-läutert.

Ronny Schleicher Seite 48 von 77

Page 55: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Hinweis: Ein detaillierte Anleitung zur Bedienung der Windows Phone 7 SpiritApplikation befindet sich im Anhang unter A.4.

Begrüßungsbildschirm

Nach dem Starten der Windows Phone 7 Spirit Applikation wird für den Zeitraum,die das Windows Phone 7 benötigt um die Applikation zu initialisieren, ein Begrü-ßungsbildschirm angezeigt, der das Logo der Fachhochschule Schmalkalden und desSpirit-Projektes beinhaltet. Dieser Begrüßungsbildschirm besteht aus einem Bild dasbestimmten Vorgaben in Höhe und Breite entsprechen muss. Aktuell wird ein Bildmit den Abmessungen 480 mal 800 benötigt, damit das komplette Display ausgefülltwerden kann.

Hauptseite

Die Hauptseite der Windows Phone 7 Spirit Applikation nutzt das Panorama-Design. Sie beinhalte eine Kurzübersicht der aktuellen News, eine Testimplementie-rung zu den Stundenplänen und einen Page für die Einstellungen. Von der Hauptseiteaus kann in verschiedenen Sub-Pages navigiert werden.

News - Detailansicht

Die News-Detailansicht implementiert das Page-Design und stellt detailliert Infor-mationen zu einer News dar. Außerdem werden alle Kommentare angezeigt, die zuder betreffenden News gehören und es kann zu der Page navigiert werden, in derKommentare hinzugefügt werden können.

Kommentar hinzufügen

Diese Page ist ebenfalls im einfachen Page-Design implementiert. Unter Verwen-dung einer TextBox und der virtuellen Tastatur ist es möglich, Kommentare zu derausgewählten News zu schreiben.

Stundenplan - Detailansicht

Der Stundenplan-Detailansicht ist in der Windows Phone 7 Spirit Applikation nichtvoll ausimplementiert, sondern bildet nur den Implementierungsrahmen für zukünf-tige Weiterentwicklungen. Hier wird das Page-Design, verwendet auf dem sich einScrollViewer mit eine Grid-Layout befindet. So ist es möglich, den Inhalt der Seitein alle Richtungen zu schieben und so mehr Informationen in Page zu bringen alsdie normale Page mit ihren horizontalen und vertikalen Abmessungen zulässt.

Ronny Schleicher Seite 49 von 77

Page 56: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

6.3 Implementierung des FHSSpirit-DataControlDas FHSSpirit-DataControl ist das zentrale Element im Backend der Spirit-Applika-tion und als eigene DLL implementiert. Die Aufgabe der DLL und der in ihr imple-mentierten Klassen ist des Empfangen von Aufträgen ausgelöst durch Aufrufe in denCode-Behinds infolge von Benutzer-Interaktionen in den Pages. Der Ansatz dahinterist, das jede Page durch ein eigenes DataControl verwaltete wird und so unabhängigvon den bestehenden Implementierungen Erweiterungen hinzugefügt werden kön-nen.

6.3.1 Instanziierung DataControlNews

In der aktuellen Implementierung enthält das FHSSpirit-DataControl die KlasseDataControlNews. Es stellt die Verbindung zum Frontend über Methoden und De-legaten bereit. Die Implementierung hat sowohl einen imperativen und funktionalenCharakter und ist als Singleton implementiert. Ursächlich für die Implementierungals Singleton ist der zustandslose Charakter der Klasse, der es nicht nötig macht,für jede Anfrage eine neue Instanz der Klasse zu erzeugen.Listing 6.4 zeigt die Implementierung der Klasse DataControlNews als Singleton.Für den Zugriff auf Instance ist bewusst nur der getter implementiert. Auf einenserialisierten Zugriff in der get Methode kann verzichtet werden, da der erste Auf-ruf der Instanz immer seriell bei Initialisieren der Applikation durch die MainApperfolgt.

Listing 6.4: DataControlNews als Singleton ohne serialisierten Zugriff.1 publ ic c l a s s DataContro lNews2 {3 pr ivate DataContro lNews ( )4 {5 }67 pr ivate s t a t i c DataContro lNews i n s t a n c e ;89 publ ic s t a t i c DataContro lNews I n s t a n c e10 {11 get12 {13 i f ( i n s t a n c e == nu l l )14 {15 i n s t a n c e = new DataContro lNews ( ) ;16 }17 return i n s t a n c e ;18 }19 // . . .20 } ;

Ronny Schleicher Seite 50 von 77

Page 57: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

In Codezeile 3 wird der Konstruktor der Klasse DataControlNews, wie für einenSingleton üblich, als private deklariert um eine Instanziierung der Klasse von au-ßerhalb mit dem new-Operator zu verhindern.

6.3.2 Umsetzung der Rest-Schnittstelle

Der Zugriff auf die Rest-Schnittstelle, und damit das Abfragen der Daten vom FHSServer, erfolgt durch den Aufruf der jeweiligen Methode requestAllNews(). Wie inKapitel 4.2.2 beschrieben wird die Klasse HttpWebRequest genutzt um den Zugriff zurealisieren. Listing 6.5 zeigt die Implementierung der Methode mit den wichtigstenElementen:

Listing 6.5: Methode requestAllNews() der Klasse DataControlNews.1 publ ic void r e que s tA l lNews ( )2 {3 t ry4 {5 HttpWebRequest httpWebRequest = ( HttpWebRequest )

HttpWebRequest . C rea te ( u r i ) ;6 httpWebRequest . Method = "GET" ;7 httpWebRequest . Accept = "application/json" ;8 httpWebRequest . Beg inGetResponse ( ResponseCa l l back ,

httpWebRequest ) ;9 }10 catch ( Excep t i on ex )11 {12 th i s . m_del_ErrorMessage ( ex . Message ) ;13 }14 }

Nachdem in Codezeile 5 ein neues Objekt von Typ HttpWebRequest erzeugt wird,wird in Codezeile 6 die Http-Protokolleigenschaft auf GET gesetzt und in Codezeile7 die Accept Eigenschaft in Http-Header auf application/json gesetzt. Anschlie-ßend wird in Codezeile 8 der Web-Request asynchron gestartet. Ein kleine Besonder-heit in Listing 6.5 ist die Fehlerbehandlung, die in Codezeile 12 unter Verwendungeines Delegaten realisiert ist.

Das Ergebiss des Web-Request aus Listing 6.5 wird in der Methode private voidResponseCallback(IAsyncResult result) direkt verarbeitet. In Listing 6.6 ist dieImplementierung zu sehen.

Ronny Schleicher Seite 51 von 77

Page 58: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Listing 6.6: Methode ResponseCallback() der Klasse FHSDataControlNews.1 pr ivate void Respon seCa l l ba ck ( I A s y n c R e s u l t r e s u l t )2 {3 t ry4 {5 HttpWebRequest httpWebRequest = ( HttpWebRequest ) r e s u l t .

AsyncState ;6 WebResponse r e s pon s e = httpWebRequest . EndGetResponse (

r e s u l t ) ;7 System . IO . Stream stream = re s pon s e . GetResponseStream ( ) ;8 System . IO . StreamReader s r = new System . IO . StreamReader (

s t ream ) ;910 th i s . p roces sJSONStr ing ( s r . ReadToEnd ( ) ) ;1112 catch ( Excep t i on ex )13 {14 th i s . m_del_ErrorMessage ( ex . Message ) ;15 }16 }17 }

In Codezeile 5 wird die Referenz auf das Objekt AsyncState, welches Bestand-teil der Interface-Definition des Typs IAsyncResult ist, auf einen Benutzerdefi-nierten Referenztyp gecasted. In diesen Fall der Typ HttpWebRequest. Anschlie-ßend wird in Codezeile 6 mit Hilfe der Referenz httpWebRequest und der Me-thode EndGetResponse ein Referenz auf das WebResponse-Objekt erzeugt, wel-ches die eigentlichen Daten im JSON-Format enthält. In Codezeile 7 und 8 wirdnun mit Hilfe der System.IO.Stream- und System.IO.StreamReader-Klassen derResponseStream ausgelesen. Die Methode ReadToEnd() die in Codezeile 10 aufden StreamReader angewendet wird, konvertiert den kompletten Eingabe-Stream ineinen string, der wiederum als Parameter für die Methode processJSONString()dient, in der die eigentliche Verarbeitung der JSON-Daten implementiert ist.

6.3.3 Verarbeitung der JSON-Daten mit LINQ

In der Windows Phone 7 Applikation werden die JSON Daten beim Senden undEmpfangen auf ähnliche Art- und Weise verarbeitet. Nachfolgende werden die Ver-arbeitungsschritte in den Methoden besprochen, die beim Empfangen von JSON-Daten verwendet werden. Zudem wird in den Listings und Beschreibungen eineBeziehung zu den in Abschnitt 6.4 verwendeten Modell hergestellt.

Ronny Schleicher Seite 52 von 77

Page 59: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

JSON-Daten

Listing 6.7 enthält einen String mit JSON-Daten, der lediglich einen Teil der Ele-mente enthält, die in den nachfolgenden Abschnitten als Datenbasis für die Be-schreibung der implementierten Methoden dient. Dennoch ist es von Vorteil diegrobe Struktur der JSON-Daten darzustellen, um beim Lesen der Listing 6.8 und6.9 leichter zwischen JObject und JArray unterscheiden zu können.

Listing 6.7: JSON-Daten mit stark vereinfachtem Inhalt.1 {2 "news" : [ {3 "news_id" :5 ,4 "title" : "Haus F 2. Stock nicht5 " con t en t ":" Im Zuge dekann de r . . . ",6 " d e g r e e C l a s s ":[{7 " c l a s s _ i d ":2,8 " t i t l e ":"MAI1",9 },{10 " c l a s s _ i d ":3,11 " t i t l e ":"MAI2",12 }]13 }],{14 ...15 }16 }

Listing 6.7 zeigt einen String mit einen JSON-Objekt "news", das ein Array vonweiteren JSON-Objekten beinhaltet. Das erste JSON-Objekt des Arrays ist in Co-dezeile 2-13 dargestellt. In diesem JSON-Objekt befindet sich in Codezeile 6 -12ein weiteres JSON-Array mit der Bezeichnung degreeClass, welches wiederum ex-emplarisch zwei JSON-Objekte enthält. Diese Unterstruktur ist besonders für dasVerständnis von Listing 6.9 und die dazugehörige Beschreibung wichtig.

Methode processJSONString()

In Listing 6.8 findet unter Verwendung der Bibliothek von Newtonsoft(Querverweisauf Anhang mit Newtonsofts DLL), wie in Kapitel 4.3.5 beschrieben, die Verar-beitung der JSON mit Hilfe des dort vorhandenen LINQ-Providers LINQ to JSON(siehe Abschnitt 3.4.4) statt. Die in Listing 6.8 verwendeten Klassen JObject undJArray sind ebenfalls Bestandteil dieser Bibliothek. Der Präfix J dieser Klassensteht in diesem Kontext im Übrigen für JSON und nicht für die Programmierspra-che JAVA3.

3http://www.oracle.com/de/technologies/java/index.html

Ronny Schleicher Seite 53 von 77

Page 60: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Listing 6.8: Methode processJSONString() der Klasse DataControlNews.1 pr ivate void proces sJSONStr ing ( s t r i ng strJSON )2 {3 JObjec t j O b j e c t = JObjec t . Par se ( strJSON ) ;4 var query = from r e s u l t A r r a y in ( JAr ray ) j O b j e c t [ "news" ]56 l e t ro = r e s u l t A r r a y as JObjec t7 orderby ( s t r i ng ) ro . Se l ec tToken ("creationDate" )

descending8 l e t f l a t = f l a t D e g r e e C l a s s e s ( ro )9 l e t comments = addComments ( ro )1011 se l ec t new I temMessageModel12 {13 Content = ( s t r i ng ) ro . Se l ec tToken ("content" ) ,14 Course = f l a t ,15 Creat ionDateTime = ( s t r i ng ) ro . Se l ec tToken ("

creationDate" ) ,16 Exp i r eDate = ( s t r i ng ) ro . Se l ec tToken ("expireDate" ) ,17 ID = ( i n t ) ro . Se l ec tToken ("news_id" ) ,18 Owner = ( s t r i ng ) ro [ "owner" ] . Se l ec tToken ("

displayedName" ) ,19 T i t l e = ( s t r i ng ) ro . Se l ec tToken ("title" ) ,20 CountComments = ( i n t ) ( ro [ "newsComment" ] as JAr ray ) .

Count ( ) ,21 NewsComments = comments22 } ;2324 I temMessageModel [ ] messages = query . ToArray ( ) ;25 th i s . m_del_ResponseNews ( messages ) ;26 }

In Codezeile 3 wird der über die Parameterliste übergebene string strJSON, derden eigentlichen JSON-String repräsentiert, der statischen Methode JObject.Parse()übergeben. Hier findet zunächst eine syntaktische Überprüfung des JSON-Stringsstatt. Falls syntaktische Fehler im JSON-String vorhanden sind, der String alsonicht valide ist, wird mit einer Ausnahme vom Typ JsonReaderException reagiert.Ein Exception-Handling findet in der Methode processJSONString() nicht satt,da in der rufenden Methode ResponseCallback() ein allgemeingültiger Exception-Handler mit Fehlerbehandlung implementiert ist.In Codezeile 4 beginnt das LINQ-Statement dieser Methode, das erst in Codezeile22 mit dem ; endet. Einzelne Zeilen innerhalb eines LINQ-Statements werden nurdurch Zeilenumbrüche oder Kommata abgeschlossen und nie mit einem Semikolon.

Ronny Schleicher Seite 54 von 77

Page 61: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Zunächst wird in Codezeile 4 die Abfragemenge, auf der das LINQ-Statement an-gewendet wird, festgelegt. In diesem Fall wird definiert, dass die Abfrage auf einemJArray arbeitet, welches in einem JObject mit der Bezeichnung "News" lokalisiertist. In Codezeile 6 findet zum ersten Mal die let-Klausel Verwendung. Mit ihr kannman dem Ergebnis eines Ausdrucks einen Namen zuweisen. In diesem Fall wird derBezeichner ro, stellvertretend für ResultObject, festgelegt, der ein einzelnes Ergeb-nis, die in der gesamten Ergebnismenge als JObject definiert. In Codezeile 7 wirddie Sortierung festgelegt, in diesem Fall nach "creationDate" absteigend, damit dieaktuellsten Nachrichten im Modell immer an erster Stelle angezeigt werden. In Co-dezeile 8 wird, wieder unter Verwendung der let-Klausel, die Methoden stringflatDegreeClasses(Object ro) an den Bezeichner flat gebunden. In Codezei-le 9 passiert das gleiche analog mit dem Bezeichner comments und der MethodeaddComments(). Die Vorgehensweise der Hilfs-Methoden wird exemplarisch in Lis-ting 6.9 erläutert.Das eigentliche select des LINQ-Statements erzeugt in Codezeile 11 mit dem Aus-druck select new ItemMessageModel ein neues Objekt des Typs ItemMessageModelund füllt in den Codezeilen 13 - 21 die Member-Variablen des Objektes. In Code-zeile 14 und 21 werden hierfür die Hilfsmethoden unter Verwendung der mit letdefinierten Bezeichner verwendet. Der Objekttyp ItemMessageModel, der in diesemLINQ-Statement verwendet wird, entspricht dem Objekttyp, der als Modell für dieDatenquelle auf UI-Seite dient. Somit wird das Modell der Datenquelle schon imLINQ-Statement gefüllt und kann direkt durch die UI verarbeitet werden. Dies istmöglich, da die Modelle in separaten DLL definiert sind, die an jeder Stelle der Ap-plikation, egal ob Frontend oder Backend, genutzt werden können. Somit ist keineDatenkonvertierung oder der Einsatz von Object-Mappern zwischen den einzelnenAnwendungsschichten nötig.Die mit new erzeugten Objekte werden in der Variable query gesammelt und inCodezeile 24 in ein Array vom Typ ItemMessageModel kopiert4. In Codezeile 25wird die Ergebnismenge mit einem Delegaten einer Methode übergeben, die für dieVerarbeitung verantwortlich ist und nicht in dieser Klasse bzw. DLL implementiertist.

Methode flatDegreeClasses()

Die Hilfs-Methode flatDegreeClasses() in Listing 6.9, die im vorherigen Abschnittschon erwähnt wurde, ist eine statische Methode der Klasse DataControlNews, dieals Parameter ein JObject erwartet und, ähnlich wie die Methode processJSONString,LINQ darauf anwendet, um eine Teilmenge des vorherigen Anfrageergebnisses zuVerarbeiten.

4Genau genommen werden hier nur die Referenzen der Objekte kopiert.

Ronny Schleicher Seite 55 von 77

Page 62: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Listing 6.9: Hilfs-Methode flatDegreeClasses() der Klasse DataControlNews.1 s t a t i c pr ivate s t r i ng f l a t D e g r e e C l a s s e s ( JObjec t j O b j e c t )2 {3 var query = from r e s u l t A r r a y in ( JAr ray ) j O b j e c t [ "

degreeClass" ]4 l e t r e s u l t O b j e c t = r e s u l t A r r a y as JObjec t5 se l ec t new Deg reeC l a s s6 {7 DegClass = ( s t r i ng ) r e s u l t O b j e c t . Se l ec tToken ("title" )8 } ;910 Deg reeC l a s s [ ] d e g r e e C l a s s e s = query . ToArray ( ) ;11 s t r i ng o u t p u t S t r i n g = "" ;12 foreach ( Deg r e eC l a s s d in d e g r e e C l a s s e s )13 {14 o u t p u t S t r i n g += d . DegClass + " " ;15 }16 return o u t p u t S t r i n g ;17 }

In Listing 6.9 wird aus allen in einem JObject enthaltenen "DegreeClass"-Objekten,die sich in einem JArray befinden, ein string erstellt, der den Rückgabewert derMethode bildet. Dieser string enthält kommasepariert alle Titel der degreeClass-Objekte.Die Zugriffmechanismen und die Verwendung von LINQ in Codezeile 3 - 8 entspre-chen dem, was in Listing 6.8 bereits beschrieben wurde. In Codezeile 10 wird dieErgebnismenge in ein Array vom Typ DegreeClass kopiert. Anschließend wird miteiner foreach-Schleife in Codezeile 12 - 15 auf alle Member DegClass.DegClasszugegriffen, die sich im Array DegreeClass[] degreeClasses befinden und so deroutputString gefüllt.

LINQ mit let-Klausel und Methoden

Ein sehr interessanter Aspekt bei den hier gezeigten LINQ-Statements in Kombi-nation mit der Verwendung der let-Klausel ist die Tatsache, dass in einem LINQ-Statement Methoden gerufen werden können. Die Methoden können wiederum aufTeilmengen der Abfrage angewendet werden und ebenfalls wieder LINQ oder dieverwendete Programmiersprache zur Verarbeitung der Daten nutzen.Außerdem ergibt sich für den Entwickler in den Methoden die Möglichkeit, Teil-mengen der Abfrage zu debuggen, was bei LINQ-Statements in dieser Form nichtmöglich ist. Das ist gerade bei aufwendigen LINQ-Statements eine sehr effektiverWeg zur Fehleranalyse.Zudem ist es über den Einsatz von Methoden in LINQ-Statement möglich, diesedynamisch, also zu Laufzeit des Programms, zu verändern. Ebenso können Erweite-rungen, die LINQ zurzeit noch nicht bietet, in diesen Methoden realisiert werden.

Ronny Schleicher Seite 56 von 77

Page 63: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

6.4 Implementierung der ModelleBei der Implementierung der Modelle wird die Möglichkeit der gemischtsprachigenProgrammierung, siehe Kapitel 3.4.5, genutzt. Die Modelle in der DLL FHSSpiritDataControlFS sind mit der Programmiersprache F# und in Modelle in der DLLFHSSpiritDataControl mit der Programmiersprache C# umgesetzt. Da beide Spra-chen Vor- bzw. Nachteile haben, nutzt die Windows Phone 7 Spirit Applikationbeide Sprachen, um ein ganzheitliches Bild der Implementierungsmöglichkeiten zuschaffen.Nachfolgende werden die Modelle ItemNewsModel, für die Nachrichten, und ItemNewsCommentModel, für die Kommentare, die einer Nachrichten hinzugefügt wer-den können, beschrieben. Die Herangehensweise bei diesen beiden Modellen stehtexemplarisch für die Umsetzungen weiterer neuer Modelle.Die Modelle in den Listings 6.10 und 6.11 besitzen nur einen Teil der im der Win-dows Phone 7 Spirit Applikation implementierten Properties, um Listings möglichstübersichtlich zu halten.

6.4.1 Modelle in C#

In Listing 6.10 wird das Modell für die News definiert. Mit der using-Anweisung inCodezeile 1 wird die Ressource System.ComponentModel belegt, die das in Codezeile6 benutzte Interface enthält. In Codezeile 2 wird die Ressource für das Modell derKommentare belegt, da dieses Modell Bestandteil des ItemNewsModel-Modell ist.Die Klasse ItemNewsModel, die hierbei immer genau eine Nachricht repräsentiert,heißt ItemNewsModel und implementiert das Interface INotifyPropertyChanged.Dieses Interface ist die Schnittstelle, die für die Verwendung von Modellen eine zen-trale Rolle einnimmt. Jedes verwendete Modell muss dieses Interface implementieren,um es als Datenquelle für UI-Element nützen zu können.Wenn ein Modell das INotifyPropertyChanged-Interface implementiert, muss jederSetter, der für das Modell relevante Daten manipuliert, immer ein PropertyChanged-Event auslösen, damit UI-Elementen (oder andere Objekte), die diese Modell nutzen,über die Änderungen informiert werden und eine Möglichkeit zur Verarbeitung be-kommen. In den Codezeilen 8 - 16 wird dafür ein Event-Handling-Mechanismusimplementiert, der dafür sorgt, das durch Änderungen von Daten am Modell dasEvent PropertyChanged korrekt ausgelöst wird. Die Implementierung, die hier ver-wendet wird, stellt die Standartimplementierung des MSDN dar.In Codezeile 17 - 29 ist im Modell der News-Identifier, also die laufende Nummerie-rung aller News, mit dem Property ID implementiert. Neben dem Getter in Codezeile20 löst der Setter in Codezeile 26 mit dem Aufruf NotifyPropertyChanged(ÏD")das Event PropertyChanged aus und erfüllt damit die im vorherigen Abschnitt be-schriebenen Anforderungen. Die Kommentare, die im Listing 6.11 als Modell imple-mentiert sind, werden in Codezeile 30 -42 als Array im ItemNewsModel verwendet,da jede News 0-n Kommentare besitzen kann. Die Implementierung entspricht, bisauf den genutzten Datentypen, vom Prinzip der Vorherigen.

Ronny Schleicher Seite 57 von 77

Page 64: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

Listing 6.10: Modell der News in C#1 using System . ComponentModel ;2 using FHSSpi r i tDataMode lsFS ;3 . . .4 namespace FHSSp i r i tDataMode l s5 {6 publ ic c l a s s ItemNewsModel : INo t i f yP rope r t yChanged7 {8 publ ic event Proper tyChangedEventHand le r PropertyChanged ;9 pr ivate void Not i f yP rope r t yChanged ( S t r i n g propertyName )10 {11 Proper tyChangedEventHand le r h a n d l e r = PropertyChanged ;12 i f ( nu l l != h a n d l e r )13 {14 h a n d l e r ( th is , new Proper tyChangedEventArgs ( propertyName

) ) ;15 }16 }17 pr ivate in t m_nID ;18 publ ic i n t ID19 {20 get { return m_nID ;}21 s e t22 {23 i f ( v a l u e != m_nID)24 {25 m_nID = v a l u e ;26 Not i f yP rope r t yChanged ( "ID" ) ;27 }28 }29 }30 pr ivate ItemNewsCommentModel [ ] m_arrNewsComments ;31 publ ic ItemNewsCommentModel [ ] NewsComments32 {33 get { return m_arrNewsComments ; }34 s e t35 {36 i f ( v a l u e != m_arrNewsComments )37 {38 m_arrNewsComments = v a l u e ;39 Not i f yP rope r t yChanged ( "CountComments" ) ;40 }41 }42 }43 }44 }

Ronny Schleicher Seite 58 von 77

Page 65: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

6.4.2 Modelle in F#

Listing 6.11 zeigt das Modell für die Kommentare, die den News hinzugefügt werdenkönnen. In Codezeile 1 wird zunächst der zu dieser Klasse gehörenden Namespacefestgelegt. Anschließend wird in Codezeile 3 mit der open-Anweisung die RessourceSystem.ComponentModel belegt.Die Klassendeklaration beginnt in Codezeile 5. In Codezeile 6 - 7 werden zweiFunktionen deklariert die durch das Schlüsselwort mutable als veränderlich gekenn-zeichnet sind und so als Member verwendet werden können.Das Event-Handling und das Verwenden des Interfaces INotifyPropertyChangedist in Codezeile 9 - 12 implementiert. Auch hier handelt es sich um eine Standar-timplementierung der MSDN.In Codezeile 14 - 18 sind die Getter und Setter des Properties ID, welches alsIdentifier für die einzelnen Kommentare verwendet wird, implementiert. In Codezeile18 wird auch hier wieder mit dem Aufruf ev.Trigger(x, PropertyChangedEventArgs(’ID’)) das Event PropertyChanged ausgelöst.Codezeile 20 - 24 implementiert analog dazu das Property CreationDateTime, dasden Zeitpunkt der Erzeugung des Kommentars beinhaltet.

Listing 6.11: Methode requestAllNews() der Klasse DataControlNews.1 namespace FHSSpi r i tDataMode lsFS23 open System . ComponentModel45 type ItemNewsCommentModel ( ) =6 l e t mutable m_nID : i n t = 07 l e t mutable m_strCreat ionDateTime : s t r i n g = ""89 l e t ev = new Event<_,_>()10 i n te r face INo t i f yP r ope r t yChanged with11 [<CLIEvent >]12 member x . PropertyChanged = ev . P u b l i s h1314 member x . ID15 with get ( ) = m_nID16 and s e t ( id ’ ) =17 m_nID <− i d ’18 ev . T r i g g e r ( x , Proper tyChangedEventArgs ("ID" ) )1920 member x . Creat ionDateTime21 with get ( ) = m_strCreat ionDateTime22 and s e t ( c reat ionDateTime ’ ) =23 m_strCreat ionDateTime <− c reat ionDateTime ’24 ev . T r i g g e r ( x , Proper tyChangedEventArgs ("

CreationDateTime" ) )

Ronny Schleicher Seite 59 von 77

Page 66: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

6. Systementwurf und Implementierung Fachhochschule Schmalkalden SS 2011

6.4.3 Fazit zu gemischtsprachigen Modellen

Wenn man die Listings 6.10 und 6.11 betrachtet fällt auf, das mit F# eine wesentlichkompaktere Implementierung möglich ist als mit C#. Beide Listings sind nach denEmpfehlungen der jeweiligen Sprache formatiert und enthalten je zwei Member mitden jeweiligen Gettern und Settern. Somit ist die Funktionalität der Klassen in etwagleich, die Anzahl der nötigen Codezeilen bei F# ist allerdings wesentlich geringen.Die Tatsache, dass nicht nur bei den Klassen, die die Modelle verwenden, gemischt-sprachig gearbeitet werden kann, sondern bei den Modellen selbst Modelle aus ande-ren Sprachen genützt werden können, bietet interessant Möglichkeiten der Modell-Implementierung. Besonders dann, wenn in den Modelle eine gewissen Grundlogikimplementiert werden soll, kann unter Umständen F# hier seinen Stärken bei dersehr kompakten Formulierung zur Berechnung von Daten voll ausspielen.

Ronny Schleicher Seite 60 von 77

Page 67: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

7 BereitstellungDieses Kapitel beschreibt die Möglichkeiten der Bereitstellung von Windows Phone7 Applikation. Dabei wird unter anderem auf den Zertifizierungsprozess des Market-place eingegangen und es werden Besonderheiten bei der Entwicklung von WindowsPhone 7 Applikation in Bezug auf die verwendete Hardware erläutert.

7.1 Bereitstellung im MarketplaceDer Marketplace bietet aktuell die einzige Möglichkeit, Windows Phone 7 Applika-tion zu vertreiben. Ein Deployment per E-Mail, wie es bei Android möglich ist, oderandere Wege sind nicht Vorgesehen. Der Marketplace bietet aufgrund seiner Zerti-fizierungsverfahren ein hohes Maß an Sicherheit und stellt durch Softwaretest, diedie Applikationen im Rahmen der Zertifizierung durchlaufen müssen, eine gewisseQualität sicher.Nach erfolgreicher Zertifizierung wird die Windows Phone 7 Applikation im Market-place bereitgestellt und kann direkt über jedes beliebige Windows Phone 7 installiertwerden. Im Rahmen der Zertifizierung enthält wie Windows Phone 7 Applikationeine Signatur, die das Ausführen der Applikation auf nicht Entwicklungsgeräte, sieheAbschnitt 7.4, erlaubt.

7.2 Hinweise zur ZertifizierungDie erfolgreiche Zertifizierung einer Windows Phone 7 unterliegt gewissen Leitlinien,die unter[Mic11g] ausführlich beschrieben sind. Vier der wichtigsten Grundsätze, dieeine Windows Phone 7 Applikation erfüllen muss sind:

• Zuverlässigkeit der Windows Phone 7 Applikation• effiziente Nutzung von Systemressourcen• keine Beeinträchtigung der Telefonfunktionalität• keine Inhalte die mit Schadsoftware gleichzusetzen sind

Neben diesen Grundsätzen gibt es noch eine Reihe anderer Vorgaben, wie die ma-ximale Größe der XPA-Dateien, Beschränkungen bei verwendetet Bilder und Icons,die Verwendung von Musik und vieles andere mehr. Alle Details sind ebenfallsunter[Mic11g] zusammen mit dem eigentlichen Zertifizierungsprozess beschrieben.

Ronny Schleicher Seite 61 von 77

Page 68: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

7. Bereitstellung Fachhochschule Schmalkalden SS 2011

7.3 BereitstellungsformatDas Bereitstellungsformat für Windows Phone 7 Applikation im Marketplace isteine Datei im XPA-Format. Dieses Format entspricht dem Format herkömmlicherZIP-Dateien und enthält alle Applikationsrelevanten Dateien.Durch einfaches Umbenennen der Dateiendung von xpa in zip ist es möglich, sichden Inhalte wie bei jeder anderen zip-Datei anzeigen zu lassen.

7.4 EntwicklungsgeräteDas Windows Phone 7 lässt nur die Ausführung von Applikationen mit einer spe-ziellen Signatur zu, die die entsprechende XPA-Datei im Rahmen der erfolgreichenZertifizierung erhält. Das bedeutet im Umkehrschluss, dass eigene Windows Phone7 Applikationen, die sich gerade in der Entwicklung befinden, nicht auf dem Gerätausgeführt werden können.Die einzige Möglichkeit, auf einem Windows Phone 7 unsignierte Applikationen aus-führen zu können, ist eine Online-Registrierung des Gerätes als Entwicklungsgeräte.Hierfür muss das Geräte über USB und unter Verwendung der Zune-Softeware1 miteinem PC verbunden werden, auf dem die Windows Phone Developer Tools RTW 2

installiert sind. Anschließend wird das Programm Windows Phone Developer Re-gistration ausgeführt. Um die nachfolgenden, in diesem Programm angebotenen,Registrierungsschritte erfolgreich durchlaufen zu können, ist ein Benutzerkonto imDeveloper Portal3 und eine Windows Live ID4 nötig.Nach erfolgreicher Registrierung des Windows Phone 7 als Entwicklungsgerät ist esnun möglich, XPA-Dateien ohne gültige Signatur auszuführen, auf dem Gerät zudebuggen und Entwicklertools auf dem Gerät einzusetzen.Eine Registrierung als Entwicklungsgeräte hat allerdings erheblichen Einfluss auf dieSicherheitskonzepte, die mit den Signaturen verbunden sind. Auch die Möglichkeit,das Entwicklertools auf das Geräte angewendet werden können, birgt Risiken. Ge-rade beim Verlust eines Gerätes können diese Faktoren erheblichen Einfluss auf denSchaden haben, der entsteht. Es ist daher nicht ratsam, ein Geräte zum Entwickelnfreizuschalten, das regulär verwendet wird und auf dem sich diesbezüglich für denBesitzer sensible Daten befinden.

7.5 Integrierter Trial-ModusDer Integrierte Trial-Modus des Windows Phone 7 bietet für Entwickler eine einfa-che Möglichkeit, die eigene Windows Phone 7 Applikation mit einem Trial-Modusauszustatten, ohne dafür explizit Funktionalität entwickeln zu müssen. Im Name-space Microsoft.Phone.Marketplace befinden sich hierfür alle nötigen Klassen

1http://www.zune.net/de-de/default.htm2http://www.microsoft.com/downloads/de-de/details.aspx3http://create.msdn.com/en-US/4www.hotmail.com

Ronny Schleicher Seite 62 von 77

Page 69: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

7. Bereitstellung Fachhochschule Schmalkalden SS 2011

und Funktionen. Der Trial-Modus kann beim Bereitstellen von Windows Phone 7Applikation als Option gewählt werden und wir vom Windows Phone 7 und demMarketplace voll unterstützt.

Listing 7.1: Nutzung des Trail-Modus in einer Methode.1 using M i c r o s o f t . Phone . Marke tp l ace ;23 publ ic p a r t i a l c l a s s MainPage : PhoneApp l i ca t i onPage4 {5 // . . .6 publ ic void saveData ( )7 {8 L i c e n s e I n f o r m a t i o n l i = new L i c e n s e I n f o r m a t i o n ( ) ;910 i f ( l i . I s T r i a l ( ) )11 {12 // Benach r i ch tung an den Benutze r mit H inwe i s13 // au f d i e Nutzung e i n e r T r a i l −Ve r s i o n14 return ;15 }16 e l se17 {18 // Aus fuehrung des Que l l c od e s de r V o l l v e r s i o n19 }20 }21 }

Listing 7.1 implementiert ein Methode saveData(), die nur in der Vollversion ihrekomplette Funktionalität bereitstellen soll. Um festzustellen, ob die Windows Pho-ne 7 Applikation im Trial-Modus ausgeführt wird, muss lediglich der NamespaceMicrosoft.Phone.Marketplace eingebunden sein und wie in Codezeile eine Re-ferenz des Typs LicenseInformation instanziiert werden. In Codezeile wird dieIsTrial() Methode verwendet, um festzustellen, in welcher Variant die Applikati-on ausgeführt wird, und entsprechend reagiert .

7.6 Erwerb der Spirit Applikation im WindowsMarketplace

Die Windows Phone 7 Spirit Applikation wird zur Zeit nicht im Marketplace be-reitgestellt, da für die Netzwerkverbindung über Rest ein eigenes, von der Fach-hochschule Schmalkalden bereitgestelltes Zertifikat verwendet wird, das in dieserForm nicht in den Installationsprozess der Applikation integriert werden kann. Al-lerdings ist die Applikation als Open-Source-Projekt im Git-Hub verfügbar, sieheAnhang A.1, und kann dementsprechend verwendet werden.

Ronny Schleicher Seite 63 von 77

Page 70: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

8 AusblickeDie Ausblicke sind aufgrund ihren unterschiedlichen Thematik in zwei Kapitel un-terteil. Kapitel 8.1 enthält Ausblicke zur Technologie des Windows Phone 7 undAktivitäten, die sich in diesem Entwicklungsbereich aktuell ergeben. Kapitel 8.2 be-schäftigt sich mit der Weiterentwicklung der Windows Phone 7 Spirit Applikationund den Funktionalitäten des FHS-Spirit Projektes im Allgemeinen.

8.1 Windows Phone 7Mittlerweile ist für das Windows Phone 7 die Anzahl der verfügbaren Geräte weitergestiegen, auch eine neue Version des Betriebssystem mit der Bezeichnung WindowsPhone 7 Mango1 ist bereits erschienen. Es bietet im Bereich der Cloud-Servicesviele neuen Funktionen und interessante Verbesserungen. Die Vereinheitlichung derBenutzeroberflächen von Desktop- und mobilen Endgeräten wird mit Metro weitervorangetrieben, wobei bei diesem Thema das Windows Phone 7 die Vorreiterrolleeingenommen hatte.Durch den Rückzug von HPs WebOS2 und der Kooperation vom Microsoft mitNokia hat die Bedeutung vom Windows Phone 7 weiter zugenommen. Aktuell sinddie Geräte, die mit Android oder dem iOS ausgerüstete sind, dem Windows Phone7 in Bezug auf Verkaufszahlen allerdings weit überlegen.Ein großer Vorteil des Windows Phone 7 für Softwareentwickler sind die wirklich sehrguten Entwicklungsumgebungen, die mit dem Visual Studio 2010 und ExpressionBlend 4 zur Verfügung stehen. Die nächste Generation des Visual Studios in derVersion 2011 ist bereits verfügbar und unterstützt die neuen Funktionen, die dasWindows Phone 7 Mango bietet. Die Version 2012 ist auch schon auf der Roadmapzu finden und Expression Blend 5 befindet sich in der Beta-Phase. Hier wird spürbar,dass das Windows Phone 7 wirklich sehr stark forciert wird.Das etwas umständliche Bereitstellen (siehe Kapitel 7) von Windows Phone 7 Appli-kation ist dagegen ein etwas störenden Faktor, der eine nicht unerhebliche Hürde fürEntwickler darstellt, die zum ersten Mal mit mobiler Entwicklung Kontakt haben.Letztendlich bleibt abzuwarten, ob die Ziele, die Microsoft mit Windows Phone 7verfolgt, realisiert werden können und mit welchen Neuentwicklungen die Konkur-renzprodukte ausgestattet sind.

1http://msdn.microsoft.com/en-us/hh2206122http://de.wikipedia.org/wiki/HP_webOS

Ronny Schleicher Seite 64 von 77

Page 71: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

8. Ausblicke Fachhochschule Schmalkalden SS 2011

8.2 FHS-Spirit ProjektNachfolgend sind Ideen und Funktionen gelistet, die im Rahmen der Arbeiten andiesem Spirit-Projekt nicht realisiert wurden. Diese Liste umfasst nicht nur Einträge,die die Windows Phone 7 Spirit Applikation betreffen, sondern auch Funktionen, dieeine Erweiterung der Server-Komponenten nach sich ziehen.Im Rahmen der prototypischen Entwicklung der Windows Phone 7 Spirit Applika-tion und den anderen Komponenten sind, gerade zum Ende hin, ebenfalls noch neueIdeen entstanden, die sich hier wiederfinden.

Handling der FHS ID und Single Sign On

An- und Abmeldung sollten mit der FHS-ID und dem entsprechenden Passwortmöglich sein. Die Anmeldedaten sollten den Daten entsprechen, die mittlerweilefast an der gesamten Fachhochschule Schmalkalden Gültigkeit besitzen.

Benutzergruppen

Einzelnen Funktionen, wie das Hinzufügen von Nachrichten, soll nur speziellen Nut-zergruppen erlaubt sein. Hierfür könnte eine eigene Benutzerverwaltung aufgebautoder die bestehenden Benutzerverwaltung der Fachhochschule Schmalkalden genutz-te werden.

Einbindung des aktuellen Stundenplans

Diese Funktionalität ist vom Konzept und von Datenmodell serverseitig implemen-tiert, besitzt aber noch keine Anbindung an die Datenbasis der aktuellen Stunden-pläne. Die Windows Phone 7 Spirit Applikation unterstützt diese Funktionalitätnicht.

Bereitstellen eines persönlichen Stundenplans

Die Funktion umfasst das Erstellen eines persönlichen Stundenplans mit automati-scher Aktualisierung bei Änderungen der Veranstaltungen durch Ausfall oder Ver-schiebung. Ebenso können hier Seminare und Tutorien eingetragen werden, die manbesuchen möchte.

Implementierung eines Modules zur Durchführung von Umfragen

Ein Modul, das es ermöglicht, studentische Umfragen im Rahmen der Fachhoch-schule Schmalkalden durchzuführen, die für wissenschaftliche Arbeiten verwendetwerden können.

Ronny Schleicher Seite 65 von 77

Page 72: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

9 FazitDiese Arbeit hat moderne imperative und funktionale Sprachelemente des Win-dows Phone 7 untersucht und sie zusammen mit einem Anwendungsfall, dem Spirit-Projekt, auf ihre Leistungsfähigkeit und Anwendbarkeit hin überprüft.Als Ergebnis der Arbeit ist festzustellen, dass es möglich ist, mit dem WindowsPhone 7 imperativ und funktional zu entwickeln. Neue Sprachen und Sprachele-mente, die im Rahmen der .NET -Entwicklung entstanden sind, sind mit einigenEinschränkungen, auch mit dem Windows Phone 7 anwendbar. Unter Verwendungprototypischer Implementierungen konnten Fragestellungen, die sich aus dem Spirit-Projekt und aus der eingesetzten Technologie ergeben haben, untersucht und gelöstwerden.Außerdem ist festzustellen, dass der Trend hin zu gemischtsprachiger Programmie-rung, in Bezug auf das Windows Phone 7, kein Trend mehr ist, sondern Stand derTechnik. Die einzelnen Fragestellungen von UI-Design über die Applikationslogik bishin zu den Netzwerkschnittstellen werden mit verschiedenen Sprachen, und teilweiseauch verschiedenen Entwicklungsumgebungen gelöst, die miteinander interagieren.Im Bezug aus das Spirit-Projekt ist festzustellen, dass das Windows Phone 7 ausEntwicklersicht alles bietet, entweder durch die Technologie des .NET Framework3.5 selbst oder durch Open-Source-Projekte, was für die Entwicklung anspruchsvollerApplikationen nötig ist. Das Entwicklungskonzept hinter dem Windows Phone 7 istdemzufolge eine sehr attraktive Plattform, die Softwareentwicklern sehr interessan-te Möglichkeiten bietet, Ideen sowohl mit funktionalen als auch mit imperativenSprachelementen umzusetzen.

Ronny Schleicher Seite 66 von 77

Page 73: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Literaturverzeichnis[Blo10] Bloch, Olivier: http://blogs.msdn.com/b/obloch/. MSDN Blogs, 2010

[Fun] Functions, Curried: http://blog.efvincent.com/parsing-json-using-f

[Mic09] Microsoft, MSDN: http://msdn.microsoft.com/de-de/magazine/dd419663.aspx. MSDN Magazin, 2009

[Mic11a] Microsoft, MSDN: http://create.msdn.com/assetscms/images/quickstarts/Navigation_FramePageNav.png. MSDN - App Hub, 2011

[Mic11b] Microsoft, MSDN: http://create.msdn.com/en-US/. MSDN Develop-ment for Windows Phone and XBOX 360, 2011

[Mic11c] Microsoft, MSDN: http://msdn.microsoft.com/de-de/fsharp/. MSDN- Microsoft F# Developer Center, 2011

[Mic11d] Microsoft, MSDN: http://msdn.microsoft.com/de-de/library/bb386964.aspx. MSDN - LINQ to Entities, 2011

[Mic11e] Microsoft, MSDN: http://msdn.microsoft.com/de-de/library/bb386977.asp. MSDN - LINQ to DataSet, 2011

[Mic11f] Microsoft, MSDN: http://msdn.microsoft.com/de-de/library/we86c8x2.aspx#multilinelambda. MSDN - Visual Basic - Mehrzeilige Lambda-Ausdrücke und -Unterroutinen, 2011

[Mic11g] Microsoft, MSDN: http://msdn.microsoft.com/en-us/library/hh184843(v=VS.92).aspx. MSDN - Application Certification Requirements for Win-dows Phone, 2011

[Mic11h] Microsoft, Silverlight: http://www.microsoft.com/germany/silverlight/entwickler.aspx. Microsoft - Silverlight, 2011

[Sys07] Systems, OakLeaf: http://oakleafblog.blogspot.com/2007/03/third-party-linq-providers.html. OakLeaf Systems - Third-Party LINQ Providers, 2007

[Wil11] Wilcox, Jeff: http://www.jeff.wilcox.name/2011/03/metro-design-guide-v1/. MSDN Blogs, 2011

Ronny Schleicher67

Page 74: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

A Anhang

A.1 Windows Phone 7 Spirit Applikation alsOpen-Source Projekt

Der komplette Quellcode der Windows Phone 7 Spirit Applikation ist in GitHub1

unter der URL https://github.com/spirit-fhs/wp7 verfügbar. Um den Quell-code zu übersetzen, ist ein Visual Studio 2010 und das aktuelle Windows PhoneDeveloper Tools RTW 2 nötig.Das Projekt im GitHib beinhaltet alle verwendeten Assemblies und DLLs, die zu demProjekt gehören. Eine Readme.txt-Datei im Projektverzeichnis enthält die nötigenInformationen.

A.2 InstallationDie Applikation ist nicht im Marketplace verfügbar. Um die Windows Phone 7 SpiritApplikation auf einem Windows Phone 7 zu installieren muss, die Applikation mitdem Visual Studio 2010 übersetzt und auf ein Windows Phone 7 übertragen werden,das unsignierte Applikationen, siehe Kapitel 7.4 ausführen kann.

A.2.1 Zertifikate installieren

Ohne das gültige Zertifikat der Fachhochschule Schmalkalden kann mit einem Win-dows Phone 7 keine Verbindung zum Rest-Service aufgebaut werden. Um das Zerti-fikat zu installieren, muss es per E-Mail an eine E-Mail-Konto geschickt werden, aufdass das Windows Phone 7 zugreifen kann. Per Klick auf den Anhang der E-Mailwird das Zertifikat installiert. Erhältlich ist das Zertifikat beim Systemadministratorder Fakultät Informatik der Fachhochschule Schmalkalden.

A.3 Automatischen TestDas Visual Studio 2010 bietet aktuell für Windows Phone 7-Projekt noch keineMöglichkeit, automatische Tests zu implementieren, so wie es bei andern .NET -Projekten üblich ist.

1http://de.wikipedia.org/wiki/GitHub2http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce

Ronny Schleicher68

Page 75: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

A. Anhang Fachhochschule Schmalkalden SS 2011

Es ist zwar möglich, mit Hilfe von zusätzlichen Softwarepaketen anderer Anbieterdiese Funktionalität zu ergänzen, allerdings wurde aufgrund der Übersichtlichkeitder Projektstruktur und der noch relative geringen Funktionalität der prototypischenImplementierung darauf verzichtet.

A.4 BenutzerhandbuchNachfolgend wird eine Einführung in die Bedienung der Windows Phone 7 SpiritApplikation gegeben, die die implementierten Funktionen, die in dieser Arbeit ent-wickelt wurden, beschreibt.

A.5 Mainpage

Abbildung A.1: Mainpage der Windows Phone 7 Spirit Applikation.

In der linken Abbildung ist die Übersicht allen News mit dem Titel, den zugeordnetenGruppen, dem Erstellungsdatum, dem Ersteller und der Anzahl der Kommentarezu sehen. Mit einem Klick auf das blau hinterlegte i, für Information, wird dieDetailansicht zu den Nachrichten geöffnet.Der mittlere Screenshot zeigt die Liste aller zur Verfügung stehenden Stundenpläne,die ebenfalls mit Klick aus das blau hinterlegte i in die Detailansicht wechseln.Der rechte Screenshot zeigt die Einstellungen, in denen die Verbindungsdaten fest-gelegt werden. In der Combo-Box stehen zur Zeit prototypisch die unterstütztenAnmeldenamen zur Auswahl.

Ronny Schleicher69

Page 76: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

A. Anhang Fachhochschule Schmalkalden SS 2011

A.6 Detailansicht NewsIn der Detailansicht News, hier links zu sehen, ist die komplette Nachricht mit allenKommentaren sichtbar. Zusätzlich ist es möglich mit einem Klick auf + Kommentarehinzuzufügen oder mit x wieder auf die Hauptseite zurückzukehren.

Abbildung A.2: Detailansicht News in der Windows Phone 7 Spirit Applikation.

Das Hinzufügen von Kommentaren ist mithilfe der integrierten Software-Tastaturmöglich, wie im rechten Screenshot zu sehen. Mit den beiden Buttons am unterenRand der Page kann der Kommentar gespeichert oder abgebrochen werden.

Ronny Schleicher70

Page 77: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

A. Anhang Fachhochschule Schmalkalden SS 2011

A.7 Detailansicht StundenpläneDie Detailansicht Stundenpläne enthält in dem gezeigten Prototyp der WindowsPhone 7 Spirit Applikation lediglich einen Entwurf der Page, der im Wesentlicheneinen Implementierungsvorschlag darstellt.

Abbildung A.3: Detailansicht Stundenpläne in der Windows Phone 7 SpiritApplikation.

Ronny Schleicher71

Page 78: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

B Anhang

B.1 Eingesetzte SoftwareFür diese Arbeit wurde für die Implementierung das Visual Studio 2010 und Ex-pression Blend 4 verwendet. Als externe Software kommt wird die Open-Source-Bibliothek Json. NET von James Newton-King1 eingesetzt.Diese Arbeit wurde mit Latex und der Software MiKTeX 2.8 2 erstellt. Die UML-Diagramme wurden mit Enterprise Architect 9.1 3, GIMP4 und MS-Paint gezeichnetund bearbeitet.

1http://james.newtonking.com/2http://miktex.org/2.83http://www.sparxsystems.de/4http://www.gimp.org

Ronny Schleicher72

Page 79: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

B. Anhang Fachhochschule Schmalkalden SS 2011

B.2 JSON-Parser mit F#

Listing B.1: JSON Parser in F# [Fun]1 type Token =2 | OpenBracket | C l o s eB ra cke t3 | OpenArray | C l o s eA r r a y4 | Colon | Comma5 | S t r i n g of s t r i n g | Number of s t r i n g67 l e t t o k e n i z e s ou r c e =8 l e t rec p a r s e S t r i n g acc = funct ion9 | ’\\ ’ : : ’ "’ :: t -> parseString (acc + "\"" ) t10 | ’ "’ :: t -> acc, t11 | c :: t -> parseString (acc + (c.ToString())) t12 | _ -> failwith "Malformed s t r i n g . "1314 let rec token acc = function15 | (’)’ :: _) as t -> acc, t16 | (’:’ :: _) as t -> acc, t17 | (’,’ :: _) as t -> acc, t18 | w :: t when Char.IsWhiteSpace(w) -> acc, t19 | [] -> acc, []20 | c :: t -> token (acc + (c.ToString())) t2122 let rec tokenize ’ acc = function23 | w :: t when Char.IsWhiteSpace(w) -> tokenize ’ acc t24 | ’{’ :: t -> tokenize ’ (OpenBracket :: acc) t25 | ’}’ :: t -> tokenize ’ (CloseBracket :: acc) t26 | ’[’ :: t -> tokenize ’ (OpenArray :: acc) t27 | ’]’ :: t -> tokenize ’ (CloseArray :: acc) t28 | ’:’ :: t -> tokenize ’ (Colon :: acc) t29 | ’,’ :: t -> tokenize ’ (Comma :: acc) t30 | ’" ’ : : t −>31 l e t s , t ’ = p a r s e S t r i n g "" t32 t o k en i z e ’ ( Token . S t r i n g ( s ) : : acc ) t ’33 | ’− ’ : : d : : t when Char . I s D i g i t ( d ) −>34 l e t n , t ’ = token ("-" + d . ToSt r ing ( ) ) t35 t o k en i z e ’ ( Token . Number ( n ) : : acc ) t ’36 | ’+ ’ : : d : : t | d : : t when Char . I s D i g i t ( d ) −>37 l e t n , t ’ = token ( d . ToSt r ing ( ) ) t38 t o k en i z e ’ ( Token . Number ( n ) : : acc ) t ’39 | [ ] −> L i s t . r e v acc40 | _ −> f a i l w i t h "Tokinzation error"4142 t o k en i z e ’ [ ] s ou r c e

Ronny Schleicher73

Page 80: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Abbildungsverzeichnis

2.1 Komponentendiagramm mit den Schnittstellen der Systeme unterein-ander. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

3.1 Metro-Design auf dem Startbildschirm des Windows Phone 7. . . . . 7

4.1 Sequenzdiagramm mit dem Ablauf der Kommunikation unter Ver-wendung der Klasse WebClient. . . . . . . . . . . . . . . . . . . . . . 24

4.2 Sequenzdiagramm mit dem Ablauf der Kommunikation unter Ver-wendung der Klasse WebRequest. . . . . . . . . . . . . . . . . . . . . 26

5.1 Frame- and Page Model [Mic11a] des Windows Phone 7. . . . . . . . 325.2 Screenshot Windows Phone 7 Emulator mit dem erzeugten Button. . 385.3 Screenshot des Windows Phone 7 Emulator mit Messagebox. . . . . . 38

6.1 Komponentendiagramm der Windows Phone 7 Spirit Applikation mitden Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

A.1 Mainpage der Windows Phone 7 Spirit Applikation. . . . . . . . . . . 69A.2 Detailansicht News in der Windows Phone 7 Spirit Applikation. . . . 70A.3 Detailansicht Stundenpläne in der Windows Phone 7 Spirit Applikation. 71

Ronny Schleicher74

Page 81: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Tabellenverzeichnis

6.1 Übersicht über die Komponenten der Windows Phone 7 Spirit Appli-kation mit den verwendeten Technologien. . . . . . . . . . . . . . . . 42

Ronny Schleicher75

Page 82: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Listings

4.1 Web-Request mit C# und der Klasse System.Net.WebClient . . . . . 234.2 Web-Request mit C# und der Klasse System.Net.HttpWebRequest . 254.3 Dispatcher.BeginInvoke unter Verwendung des Lambda Operators . . 27

5.1 Datei: Page.xaml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365.2 Inhalt des Code-Behind in C#. . . . . . . . . . . . . . . . . . . . . . 37

6.1 Ausschnitt aus der Datei: MainViewModelSampleData.xaml . . . . . 466.2 Festlegung der Delegaten im Konstruktor der Klasse MainPage . . . . 476.3 Ausschnitt aus einem Markup mit Datenbindung der View. . . . . . . 486.4 DataControlNews als Singleton ohne serialisierten Zugriff. . . . . . . . 506.5 Methode requestAllNews() der Klasse DataControlNews. . . . . . . . 516.6 Methode ResponseCallback() der Klasse FHSDataControlNews. . . . 526.7 JSON-Daten mit stark vereinfachtem Inhalt. . . . . . . . . . . . . . . 536.8 Methode processJSONString() der Klasse DataControlNews. . . . . . 546.9 Hilfs-Methode flatDegreeClasses() der Klasse DataControlNews. . . . 566.10 Modell der News in C# . . . . . . . . . . . . . . . . . . . . . . . . . 586.11 Methode requestAllNews() der Klasse DataControlNews. . . . . . . . 59

7.1 Nutzung des Trail-Modus in einer Methode. . . . . . . . . . . . . . . 63

B.1 JSON Parser in F# [Fun] . . . . . . . . . . . . . . . . . . . . . . . . 73

Ronny Schleicher76

Page 83: Entwicklung einer Windows Phone 7 Applikation unter Verwendung moderner imperativer und funktionaler Sprachelemente

Eidesstattliche ErklärungIch versichere an Eides Statt durch meine eigenhändige Unterschrift, dass ich dievorliegende Arbeit selbstständig und ohne fremde Hilfe angefertigt habe. Alle Stel-len, die wörtlich oder dem Sinn nach auf Publikationen oder Vorträgen andererAutoren beruhen, sind als solche kenntlich gemacht. Ich versichere außerdem, dassich keine andere als die angegebene Literatur verwendet habe. Diese Versicherungbezieht sich auch auf alle in der Arbeit enthaltenen Zeichnungen, Skizzen, bildlichenDarstellungen und dergleichen.

Die Arbeit wurde bisher keiner anderen Prüfungsbehörde vorgelegt und auch nochnicht veröffentlicht.

Roßdorf,den 24. September

2011Ort, Datum Ronny Schleicher

Ronny Schleicher77