Beruflich Dokumente
Kultur Dokumente
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 -
Fakultt Informatik Referent: Prof. Dr. Oliver Braun Korreferent: Dipl.-Mathematiker Michael Otto eingereicht von: Ronny Schleicher Matr.-Nr. 290723 Obertor 6 98590 Rodorf Schmalkalden, den 24.09.2011
Zusammenfassung Mit dem Windows Phone 7 bietet Microsoft eine neue Smartphone-Generation an, die sich von den bisherigen Konzepten der Windows Mobile Serie komplett unterscheidet. Der Schritt von ehemals fast reinen Businessgerten, die bis auf wenige Ausnahmen selten den Weg zum Endkunden gefunden haben, hin zu ConsumerGerten fr den einfachen Benutzer, und damit einem sehr viel breiterem Marktsegment, scheint damit vollzogen. Bei solch einem Kurswechsel ist es nicht nur ntig die Hard- und Software endkundenfreundlich zu gestalten. Auch ein neues Entwicklungskonzept fr Anwendungssoftware muss dabei Bestandteil des Kurswechsels sein. Das ist mit dem Windows Phone 7 passiert. In dieser Arbeit wird das Entwicklungskonzept des Windows Phone 7 im Bereich gebotenen der Hard- und Software untersucht. Ein Schwerpunkt ist das Prfen der Verfgbarkeit und Anwendbarkeit moderner imperativer und funktionaler Sprachelemente. Diese Konzepte werden in dieser Arbeit untersucht und vorgestellt. Um bei der Analyse der durch das Windows Phone 7 und dessen Software gebotenen Entwicklungsmglichkeiten den praktischen Nutzen zu prfen, wurde im Rahmen dieser Arbeit eine Windows Phone 7 Applikation entwickelt, die einen Cloud-Service der FH-Schmalkalden nutzt. Im Rahmen dieser Entwicklung wurden die imperative und funktionaler Sprachelemente nicht nur theoretisch analysiert, sondern auch in einem praktischen Kontext eingesetzt, um sich ein ganzheitliches Bild des Windows Phone 7 in Bezug auf Aspekte der modernen Softwareentwicklung zu verschaen.
Danksagung Zu allererst mchte ich den Personen meiner Arbeitsgruppe danken, die mit mir das Gemeinschaftsprojekt FHS-Spirit bearbeitet haben. Benjamin Ldicke, der sich fr den REST-Service verantwortlich zeigte und viele tolle Ideen und Mglichleiten einbrachte, um unsere gemeinsame Aufgabe zu realisieren. Florian Schuhmann, der den Web-Service bearbeitete und darber hinaus noch viele andere Aufgaben bernahm, wie das Erstellen der Latex-Vorlage, die in dieser Arbeit verwendet wurde. Sebastian Stallenbergen, der im Bereich der Android-Applikation ttig war und mit dem gerade die Fragestellungen zu mobilen Endsystemen, die auch Bestandteil meiner Arbeit waren, diskutiert und gelst werden konnten. Danken mchte ich ebenfalls dem Referenten der Arbeit, Prof. Dr. Oliver Braun, der mit seinem Sprit-Projekt diese Arbeit erst mglich machte, immer fr neue Ideen oen war und fr Fragen und Probleme jederzeit als Ansprechpartner zu Verfgung stand. Dipl.-Mathematiker Michael Otto mchte ich dafr danken, der es als Korreferent diese Arbeit betreute und sich im Bereich der Server-Komponenten sehr fr das Projekt eingesetzt hat. Abschlieend mchte ich noch bei meiner Familie, also meiner Frau Stefanie und meinem kleinen Sohn Alexander bedanken, die mit mir gemeinsam die vier arbeitsreichen Semester des Masterstudiums berstehen mussten und denen oft gemeinsame Zeit gefehlt hat.
Inhaltsverzeichnis
1 Einleitung 1.1 Prmissen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Hinweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Gliederung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 FHS-Spirit Projekt 2.1 Entwicklungsgeschichte des FHS-Spirit Teilprojektes . 2.2 Projektverlauf . . . . . . . . . . . . . . . . . . . . . . 2.3 Leitungsmerkmale . . . . . . . . . . . . . . . . . . . . 2.4 Anforderungsbeschreibung der mobilen Applikationen 1 1 1 2 3 3 4 4 5 6 6 7 7 8 9 9 10 13 13 14 14 14 15 15 15 15 17 17 17 17 18 19 19
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
3 Windows Phone 7 3.1 Was ist ein Windows Phone 7? . . . . . . . . . . . . . . . . . . . . . 3.1.1 Metro-Design . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Cloud-Computing und Cloud-Services . . . . . . . . . . . . . . 3.1.3 iPhone und Windows Phone 7 . . . . . . . . . . . . . . . . . 3.1.4 Android und Windows Phone 7 . . . . . . . . . . . . . . . . . 3.1.5 Windows Phone 7 Kernel . . . . . . . . . . . . . . . . . . . . . 3.2 Hardwarevoraussetzungen . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Technologien zum Entwickeln mit Windows Phone 7 . . . . . . . . . 3.3.1 Silverlight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 XNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Eingesetzte Technik fr die Spirit Applikation . . . . . . . . . 3.4 Untersttzte Sprachen und Technologie . . . . . . . . . . . . . . . . . 3.4.1 C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.2 Visual Basic . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.3 F# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.4 LINQ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.4.5 Gemischtsprachige Programmierung . . . . . . . . . . . . . . . 3.4.6 Eingesetzte Sprachen fr die Spirit Applikation . . . . . . . . 3.5 Verfgbare Entwicklungsumgebungen . . . . . . . . . . . . . . . . . . 3.5.1 Microsoft Visual Studio 2010 . . . . . . . . . . . . . . . . . . . 3.5.2 Microsoft Expression Blend 4 . . . . . . . . . . . . . . . . . . 3.5.3 Alternative Entwicklungsumgebungen . . . . . . . . . . . . . . 3.5.4 Verwendete Entwicklungsumgebungen fr die Spirit-Applikation
4 WP7 Spirit Applikation Backend 21 4.1 Netzwerkkommunikation - Datenformate und Protokolle . . . . . . . 21 4.1.1 REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Ronny Schleicher
IV
Inhaltsverzeichnis
4.2
4.3
4.1.2 JSON . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.3 XML . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.4 Verwendetes Datenformat in der Spirit Applikation Mglichkeiten der Umsetzung der REST-Schnittstelle . . . 4.2.1 WebClient-Klasse . . . . . . . . . . . . . . . . . . . 4.2.2 HttpWebRequest-Klasse . . . . . . . . . . . . . . . 4.2.3 Eingesetzte Technik in der Spirit Applikation . . . Verarbeitung der JSON Daten . . . . . . . . . . . . . . . . 4.3.1 Bibliotheken zur Verarbeitung von JSON . . . . . . 4.3.2 C# und JSON . . . . . . . . . . . . . . . . . . . . 4.3.3 F# und JSON . . . . . . . . . . . . . . . . . . . . 4.3.4 Linq to JSON . . . . . . . . . . . . . . . . . . . . . 4.3.5 Eingesetzte Technik in der Spirit Applikation . . .
5 WP7 Spirit Applikation Frontend 5.1 UI Design . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Design-Steuerelemente . . . . . . . . . . . . . . . 5.1.2 Bildschirmorientierung . . . . . . . . . . . . . . . 5.1.3 Eingesetzte Techniken in der Spirit Applikation . 5.2 XAML . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 XAML in Silverlight und dem Windows Phone 7 5.2.2 Markup . . . . . . . . . . . . . . . . . . . . . . . 5.2.3 Code-Behind . . . . . . . . . . . . . . . . . . . . 5.2.4 Ergebnis Markup und Code-Behind . . . . . . . . 5.2.5 Verwendeten Techniken in der Spirit Applikation 5.3 XAML und Datenreprsentation . . . . . . . . . . . . . . 5.3.1 UI-Elemente und Code-Behind . . . . . . . . . . 5.3.2 UI-Elemente und Modelle . . . . . . . . . . . . . 5.3.3 Eingesetzte Techniken in der Spirit Applikation . 6 Systementwurf und Implementierung 6.1 Systembersicht . . . . . . . . . . . . . . . . . . . . . 6.1.1 Komponentendiagramm der Spirit Applikation 6.2 Implementierung der FHSSpirit-App . . . . . . . . . 6.2.1 Elemente der FHSSpirit-App . . . . . . . . . 6.2.2 Funktionsweise der FHSSpirit-App . . . . . . 6.2.3 Pages im Frontend . . . . . . . . . . . . . . . 6.3 Implementierung des FHSSpirit-DataControl . . . . 6.3.1 Instanziierung DataControlNews . . . . . . . 6.3.2 Umsetzung der Rest-Schnittstelle . . . . . . . 6.3.3 Verarbeitung der JSON-Daten mit LINQ . . . 6.4 Implementierung der Modelle . . . . . . . . . . . . . 6.4.1 Modelle in C# . . . . . . . . . . . . . . . . . 6.4.2 Modelle in F# . . . . . . . . . . . . . . . . . 6.4.3 Fazit zu gemischtsprachigen Modellen . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
Ronny Schleicher
Inhaltsverzeichnis
7 Bereitstellung 7.1 Bereitstellung im Marketplace . . . . . . . 7.2 Hinweise zur Zertizierung . . . . . . . . . 7.3 Bereitstellungsformat . . . . . . . . . . . . 7.4 Entwicklungsgerte . . . . . . . . . . . . . 7.5 Integrierter Trial-Modus . . . . . . . . . . 7.6 Erwerb der Spirit Applikation im Windows
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Marketplace
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
8 Ausblicke 64 8.1 Windows Phone 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 8.2 FHS-Spirit Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 9 Fazit Literaturverzeichnis A Anhang A.1 Windows Phone 7 Spirit Applikation als Open-Source A.2 Installation . . . . . . . . . . . . . . . . . . . . . . . A.2.1 Zertikate installieren . . . . . . . . . . . . . A.3 Automatischen Test . . . . . . . . . . . . . . . . . . . A.4 Benutzerhandbuch . . . . . . . . . . . . . . . . . . . A.5 Mainpage . . . . . . . . . . . . . . . . . . . . . . . . A.6 Detailansicht News . . . . . . . . . . . . . . . . . . . A.7 Detailansicht Stundenplne . . . . . . . . . . . . . . 66 67 68 68 68 68 68 69 69 70 71
Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
Ronny Schleicher
VI
1 Einleitung
Das Windows Phone 7 wird im Rahmen dieser Arbeit als Entwicklungsplattform fr eine prototypische Softwareimplementierung eingesetzt. Dabei werden die gestellten Anforderungen und deren Realisierungsmglichkeiten unter Verwendung moderner funktionalen und imperativen Sprachelemente untersucht. Die Anforderungen an die zu entwickelnde Software kommen aus dem in Kapitel 2 beschriebenen FHS-Spirit Projekt und verknpfen so eine wissenschaftliche Arbeit mit realen Anforderungen eines wirklichen Anwendungsfalls. Somit werden ergnzende Einblick in die fr Softwareentwickler gebotenen Mglichkeiten des Windows Phone 7 mglich. Zustzlich wird durch die prototypische Softwareimplementierung untersucht, welche Entwicklungsumgebungen, Werkzeuge und Fremdsoftware sich fr die Umsetzung eignen und welche Technologien sich mit welchem Aufwand auf dem Windows Phone 7 einsetzten oder integrieren lassen.
1.1 Prmissen
Da es sich bei der zu entwickelten Software um einen Client-Applikation handelt, die mit einem Server kommuniziert, gibt es einige Prmissen, die bei der Umsetzungen der Software beachtet werden mssen. Diese ergeben sich aus dem Projekt in Kapitel 2, das in seinem Funktionsrahmen den praktischen Teil dieser Arbeit beeinusst. Prmissen der Windows Phone 7 Spirit Applikation im Bezug auf die Client-ServerKommunikation sind: REST als Zugrismechanismus fr Netzwerk-Ressourcen generalisiertes REST -Interface fr alle Applikationen XML oderJSON als Datenformat der REST -Schnittstelle Einsatz von Zertikaten fr die Netzwerkfunktionalitt
1.2 Hinweise
Die einzelnen Kapitel dieser Arbeit bauen teilweise aufeinander auf. Viele Begrilichkeiten in Bezug auf das Windows Phone 7 werden in Kapitel 3 eingefhrt und in darauf in den folgenden Kapitel verwendete.
Ronny Schleicher
Seite 1 von 77
1. Einleitung
Kapitel 6 baut auf den Inhalten und Schlussfolgerungen der Kapitel 4 und 5 auf, in denen Nomenklaturen fr Datenformate und Begrie im Bereich der Softwareentwicklung fr das Windows Phone 7 eingefhrt werden. Dieses Kapitels, und auch die vorherigen beiden Kapitel, setzen Grundkennnisse in der Softwareentwicklung voraus, da hier wesentliche Dinge zur Implementierung erlutert werden.
1.3 Gliederung
Im Kapitel 2 wird zunchst das FHS-Spirit Projekt vorgestellt und erlutert, in welchem Zusammenhang diese Arbeit mit den dort beschriebenen Projekt steht. Im Kapitel 3 wird das Windows Phone 7 aus Benutzer- und Entwicklersicht beschrieben. Dabei werden zunchst Hard- und Softwareeigenschaften des Windows Phone 7 analysiert und Technologien vorgestellt, die fr die Entwicklung von Software fr das Windows Phone 7 essentiell sind. Hier wird auch ein berblick auf zur Verfgung stehenden Entwicklungsumgebungen gegeben. Ebenso werden imperative und funktionale Programmiersprachen vorgestellt, die bei der Entwicklung von Windows Phone 7 Software eingesetzt werden knnen. Kapitel 4 beschreibt Technologien, die im Windows Phone 7 zu Verfgung stehen, um die prototypischen Anforderungen an die Applikation zu erfllen. Dabei werden Basistechnologien untersucht, um die eigentliche Backend-Funktionalitt bereitzustellen. Schwerpunkte in diesem Kapitel sind die verschiedenen Mglichkeiten der Netzwerkkommunikation und die Verarbeitung der Datenformate. Dabei werden sowohl die im Windows Phone 7 vorhandenen Technologien und alternativen Anstze durch Erweiterungen mit zustzlicher Fremdsoftware untersucht. Das Kapitel 5 beschreibt ebenfalls Technologien des Windows Phone 7, der Schwerpunkt liegt in diesem Fall allerdings auf der Frontend-Funktionalitt. Hier geht es um die Funktionen und Techniken, die zur Umsetzungen der Benutzerschnittstelle, also der eigentlichen Oberche des Windows Phone 7, genutzt werden knnen. Die Umsetzung der Windows Phone 7 Spirit Applikation und somit die konkrete Anwendung der in Kapitel 4 und Kapitel 5 ermittelten Lsungsmglich ndet in Kapitel 6 statt. Hier wird der Systementwurf der Windows Phone 7 Spirit Applikation vorgestellt und die eigentliche Implementierung erlutert. Kapitel 7 enthlt eine Beschreibung zur Bereitstellung von Windows Phone 7 Applikation im Allgemeinen. Hier benden sich auch Hinweis zu Zertikaten, Entwicklungs- und Testgerten sowie dem Marketplace, in dem Windows Phone 7 Applikation erworben werden. In den Ausblicken in Kapitel 8 ndet sich eine Ideensammlung fr Funktionalitten, die im Rahmen des Prototypen, der Windows Phone 7 Spirit Applikation, oder des Rest-Service noch nicht zur Verfgung standen. Fr Weiterentwicklungen sind die dort formulierten Vorschlge aber mit Sicherheit interessant. Im letzten Kapitel 9 ndet sich ein Fazit zur gesamten Arbeit und der daraus entstandenen Windows Phone 7 Spirit Applikation.
Ronny Schleicher
Seite 2 von 77
2 FHS-Spirit Projekt
Das FHS-Spirit Projekt ist eine Gemeinschaftsarbeit Studierender der Fachhochschule Schmalkalden, die das Ziel hat, das Informationssystem der Fakultt weiter auszubauen, neue Idee umzusetzen und auch Altsoftware durch moderne Technologien, Sprachen und Herangehensweisen zu verbessern. Studenten aus verschiedenen Semestern und Studiengngen versuchen gemeinsam etwas dazu beizutragen, entweder durch theoretische Arbeiten, indem bestimmte Fragestellungen untersucht und ihre Ergebnisse zugnglich machen, oder praktische durch Arbeiten, die als Ergebnis konkrete prototypische Implementierungen hervorbringen, die gegebenenfalls die Grundlage fr weitere Arbeiten oder Lsungen darstellen. Im Rahmen zahlreicher Studien-, Bachelor- und Masterarbeiten wird so versucht, Studierenden durch das Arbeiten an einem groen Gemeinschaftsprojekt ein Gefhl dafr zu vermitteln, wie Software nicht nur durch den Einzelnen sondern durch eine Gemeinschaft immer weiter wachsen und sich weiterentwickeln kann.
Ronny Schleicher
Seite 3 von 77
2. FHS-Spirit Projekt
2.2 Projektverlauf
Bei dem Projekt wurde mit vier Studenten ungefhr drei Monaten lang der Systementwurf, das Datenmodell und die Schnittstellen in gemeinsamen Besprechungen entwickelt, die zwei Mal wchentlich stattfanden. In der Zeit zwischen den Besprechungen galt es meist, technische Fragestellungen zu untersuchen, die sich durch die Analyse eingebrachter Vorschlge in den Besprechungen selbst ergaben. In diesen Besprechungen war stets der rege Austausch zwischen den Studenten und dem verantwortlichem Professor eine wichtige Basis fr das Vorankommen des Projektes. Auch Studenten, die an anderen Projekten im Rahmen von Spirit arbeiteten, nahmen an diesem Besprechungen Teil. Ein Schwerpunkt stellt dabei der Entwurf des generischen Datenmodells da, das den Anspruch hatte, auch zuknftige Ideen und Funktionalitten abbilden zu knnen. Nach ungefhr einem Monat entwickelte sich von der Idee ein konkreter Systementwurf mit einem Datenmodell, das in den folgenden Besprechungen immer weiter verfeinert wurde. In der zweiten Hlfte der Masterarbeiten begann die Arbeitsgruppe mit dem Entwurf und der Implementierung der ersten Prototypen. Auch die Denition der Schnittstelle wurde in dieser Zeit angepasst und in einen Zustand gebraucht, der fr die Implementierung der Client-Anwendungen die ntige Funktionalitt bot. Im letzten Drittel der Bearbeitungszeit wurde sich verstrkt der Entstehung der jeweiligen Masterthesis gewidmet und die Dokumentation der Schnittstellen weiter verfeinert. Die Implementierungen wurden in einen Beta-Status gebracht, der die Funktionsweise und Einsatzmglichkeit des Gesamtsystems verdeutlicht und die Interoperabilitt zwischen den unterschiedlichen Technologien hervorhebt.
2.3 Leitungsmerkmale
Das in diesem Projekt entwickelte Informationssystem beinhaltet einen Cloud-Service, der eine Rest-Schnittstelle zum Abfragen und ndern von Informationen bietet. Dieser Service stellt die serverseitige Komponente des Informationssystems dar und ist mit der Programmiersprache Scala entwickelt. Als Datenbasis dient ein PostgreSQL Datenbanksystem. Auerdem wurde mit dem Lift-Framework ein Web-Service entwickelt, der ebenfalls die Rest-Schnittstelle nutzt und die Mglichkeiten von HTML5 implementiert. Dieser Web-Service ist vorwiegend als Schnittstelle fr Browser auf Desktopsystemen angedacht. Im Bereich der mobilen Endgerte wurde je einen Applikation fr Android und Windows Phone 7 entwickelt. Die Windows Phone 7 Applikation bildet die Grundlage fr diese Arbeit und wurde als das Equivalent zur Adroid-Applikation bearbeitet.
Ronny Schleicher
Seite 4 von 77
2. FHS-Spirit Projekt
Abbildung 2.1 zeigt in einem Komponentendiagramm noch einmal alle wesentlichen Bestandteile des gesamten Projektes mit den wichtigsten Schnittstellen. Deutlich zu erkennen ist, dass der Rest-Service eine zentrale Rolle einnimmt und die Basis fr alle andern Applikationen und dem Web-Service bildet.
Abbildung 2.1: Komponentendiagramm mit den Schnittstellen der Systeme untereinander. Die grau hinterlegte Komponente bzw. das Endgert Windows Phone 7 stellt dabei den Teil dar, der in dieser Masterthesis bearbeitet wurde.
Ronny Schleicher
Seite 5 von 77
3 Windows Phone 7
Ziel dieses Kapitels ist es, die Ideen und das Entwicklungskonzepte hinter dem Windows Phone 7 verstndlich zu vermitteln. Neben der eigentliche Frage, was das Windows Phone 7 eigentlich ist, werden die Hardwarevoraussetzungen des Gertes beschrieben und Technologien analysiert, die fr die Entwicklung von Software fr das Windows Phone 7 zur Verfgung stehen. Auch die Programmiersprachen und Entwicklungsumgebungen, die fr das Windows Phone 7 in Frage kommen, werden beschrieben und auf ihre Verwendungsmglichkeiten im Rahmen der Windows Phone 7 Spirit Applikation untersucht.
Ronny Schleicher
Seite 6 von 77
3. Windows Phone 7
3.1.1 Metro-Design
Die wohl aulligste Neuerung beim Windows Phone 7 ist die komplett neue konzipierte Benutzeroberche. Mit diesem Metro Design entwickelte Microsoft, auch im Rahmen der Windows Phone 7 Konzeption, ein Designkonzept fr Benutzeroberchen, beim dem, wie der Name schon vermuten lsst, die Informationsprsentation in Flughfen, U-Bahnen und Bahnhfen als Inspiration diente. Die Idee, dass das Oberchendesign Beschilderungen nachempfunden ist, hat das Ziel die eigentliche Information, und nicht die Informationsprsentation, als zentrales Element zwischen Applikation und Nutzer zu stellen. Informationen werden dabei als eindeutige Piktogramme, gut lesbarer Text oder als Kombination von beiden dargestellt. Abbildung A.3 enthlt die typischen Benutzeroberchen des Windows Phone 7 im Metro-Design:
Abbildung 3.1: Metro-Design auf dem Startbildschirm des Windows Phone 7. Unter[Wil11] sind sogenannten Metro-Design-Regeln fr Windows Phone 7 Entwickler zu nden, die interessante Hinweise enthalten, wie Oberchen im Metro-Design implementiert werden.
Ronny Schleicher
Seite 7 von 77
3. Windows Phone 7
Der Bing-Dienst dient der schnellen Suche im Internet und der Facebook-Dienst stellte die Verbindung zu dem bekannten Sozialen-Netzwerk sicher. Neben diesen Diensten, die aufgrund fehlender APIs 1 fr Softwareentwickler eher eine untergeordnete Rolle spielen, gibt es noch zwei spezielle Dienste, die fr selbst entwickelte Windows Phone 7 Applikation Funktionalitt zur Verfgung stellen. Location-Dienst Mit dem Location-Dienst knnen ber eine API geobasierte Informationen, also Positionsdaten ber den aktuellen Standort, abgefragt werden. Somit wird die Mglichkeit geboten, diese Daten in der eigenen Windows Phone 7 Applikation zu nutzen und so standortabhngige Funktionalitten zu entwickeln. Push Notication Service Der Push Notication Service ist aus entwicklungstechnischer Sicht eine sehr interessante Funktionalitt des Windows Phone 7. Er bietet die Mglichkeit, einem selbst entwickelten Web-Service eine URL2 zu schicken, unter der die eigene Windows Phone 7 Applikation erreichbar ist, selbst wenn die Applikation nicht mehr ausgefhrt wird. Falls der Web-Service nun Daten an die Windows Phone 7 Applikation bermitteln mchte, sendet er die Daten nicht direkt nicht an die Applikation, sondern an die entsprechende URI. Diese URI qualiziert allerdings nicht das Windows Phone 7 oder die Windows Phone 7 Applikation direkt, sondern den Push Notication Service in der Cloud, der eine Nachricht an das entsprechende Windows Phone 7 sendet. Anschlieend bekommt der Benutzer die Mglichkeit, mit Hilfe der eingeblendeten Nachricht, die entsprechende Windows Phone 7 Applikation, quasi ber eine Verknpfung, sofort zu Starten.
API: Application Programming Interface - Programmierschnittstelle URL: Uniform Resource Locator 3 http://www.apple.com/de/iphone/
2
Ronny Schleicher
Seite 8 von 77
3. Windows Phone 7
Eine Gemeinsamkeit zwischen Windows Phone 7 und dem iPhone besteht darin, dass das Betriebssystem bei beiden Plattformen nicht gendert oder angepasste werden darf und somit einen feste und unvernderliche Basis fr die Entwicklung von Applikationen bietet. Ebenso ist der Zugri auf smtliche Sensoren bei beiden Systemen standardisiert. Auerdem mssen alle Applikationen, die im Windows-Marketplace oder im App-Store angeboten werden, einen Kompatibilitts- und Performancetest bestehen, bevor sie fr die Installation auf den Endgerten zugelassen werden. Damit soll bei beiden Systemen eine gewisse Qualitt der Applikationen sichergestellt werden.
Ronny Schleicher
Seite 9 von 77
3. Windows Phone 7
3.2 Hardwarevoraussetzungen
Ander als bei Android, wo es in Bezug auf die Hardware im Prinzip keine Beschrnkungen gibt, oder beim iPhone, bei dem die Hardware vom Hersteller in den verschiedenen Versionen selbst festgelegt wird, gibt es beim Windows Phone 7 folgende fest denierte Hardwarevoraussetzungen, die ein Hersteller mit seinen Gerten erfllen muss. Display Beim Display wird ein kapazitiver Touchscreen, also eine Screen der mittels elektrischer Feldstrkemessung die Berhrungspunkte ermittelt, mit Multi-Touch-Untersttzung fr mindestens vier Berhrungspunkte und einer Ausung von 800x480 Pixel gefordert. Resistive, also druckempndliche, Touchscreens werden nicht untersttzt. Prozessor Die Mindestanforderung hier ist eine Rechenleitung von 1 GHz. Mehrkernsystem werden aktuell nicht untersttzt, sind aber Bestandteil der Roadmap knftiger Versionen. Grak Ein DirectX 9 6 kompatibler Grakchipsatz mit hardwareseitiger Beschleunigung fr DirectX und Direct3D sollen eine ssige Darstellung der Silverlight-Applikationen und XNA-Spiele gewhrleisten und mssen somit vorhanden sein. Audio Das Mikrofon und die Lautsprecher inkl. Kopfhreranschluss mssen ber die API steuerbar sein. Das integrierte FM-Radio, das allerdings, wie bei Smartphones blich, nur mit angeschlossenen Kopfhrern funktioniert, bietet noch weitere Schnittstellen im Audiobereich, die ebenfalls von der API untersttzt werden mssen. Speicher Die minimale Gre des Arbeitsspeichers betrgt 256MB, die des Datenspeichers 8GB. Eine Erweiterung des Datenspeichers mittel austauschbarer Speicherkarte ist nicht vorgesehen. Tastatur Die integrieren Software-Tastatur, die unter Windows Mobile 5.x und 6.x auch als Soft-Input-Panel oder SIP bezeichnet wurde, ist Standard bei allen Windows Phone
6
http://msdn.microsoft.com/de-de/directx/
Ronny Schleicher
Seite 10 von 77
3. Windows Phone 7
7 Gerten. Hardwaretastaturen sind nur als optionale Komponente konzipiert, die lediglich Texteingaben ermglichen und nicht zum eigentlichen Steuern von Applikationen verwendet werden knnen. Denierte Gertetasten Jedes Windows Phone 7 verfgt mit der Power-Taste, der Taste zur Lautstrkeregelung und der Kamerataste ber drei fest denierte Hardware-Tasten. Die Power-Taste dient, je nach Gertezustand, zum Ein- und Ausschalten des Bilderschirms oder des kompletten Gertes. Die Lautstrketaste Taste reguliert die systemweiten Gertelautstrkeregelung. Auerdem kann mit ihr bei eingehenden Telefonaten der Rufton deaktiviert werden. Die Kamerataste wird zur Aktivierung der Kamera verwendet und funktioniert auch bei Bildschirmsperre oder StandbyMode. Sie muss durch halbes drcken auerdem einen Autofokus untersttzen. Darber hinaus muss jedes Windows Phone 7 ber drei weitere kapazitive Tasten verfgen. Mit der Starttaste gelangt der Anwender immer sofort auf die Startseite, die beim Windows Phone 7 einfach nur als Start bezeichnet wird. Mit der Suchtaste wird ein Suchdienst gestartet. Das ist in den meisten Fllen der Bing-Dienst, im Marketplace eine spezielle Marketplace-Suche, in den Kontakten die Personensuche und im E-Mail Bereich ein E-Mai-Suche. Die kapazitive Zurck-Taste nimmt eine besondere Rolle ein. Beim Aktivieren der Taste wird standartmig immer die zuletzt angezeigt Seite, auch Page genannt, wiederhergestellt. Somit ist einen Navigation innerhalb einer und zwischen verschiedenen Windows Phone 7 Applikationen mglich. Interessant fr Entwickler ist, dass das Auslsen der Taste in einer Windows Phone 7 Applikation abgefangen werden kann. Somit ist es mglich, auf das Zurck in der eigenen Applikation entsprechen zu reagieren. Bei einer Client-Anwendung wre es so mglich, vor dem Beenden Abmelde-Protokolle ausfhren oder Daten zu speichern. Allerdings darf eine eigene Implementierung der Zurck-Taste das Navigationsmodell des Windows Phone 7 nicht behindern oder auer Kraft setzen. Bei den Tests im Rahmen der Freigabe einer Applikation fr den Marketplace wird dementsprechend auch auf ein funktionierendes Navigationsmodell geprft[Mic11b]. Sensoren Es groes Problem bei der Windows Mobile 5.x und 6.x Generationen war zum einen der heterogene Zugri ber die APIs auf die in den Gerten vorhandenen Sensoren, zum anderen die Heterogenitt der Sensoren selbst. Beim Windows Phone 7 sind dagegen die enthaltenen Sensoren im Bezug auf ihre Schnittstellen homogen.
Ronny Schleicher
Seite 11 von 77
3. Windows Phone 7
Folgende Sensoren mssen in jedem Windows Phone 7 vorhanden sein: Accelerometer: Dient zur Beschleunigungsmessung. A-GPS: Das Assised Global Position System dient zur Positionsbestimmung. Neben der herkmmlichen GPS-Funktionalitt bietet dieses System auch die Mglichkeit, eine Standortbestimmung per GPS-Triangulation oder ber vorhandene WLAN-Netze mit IP-Lokalisierung durchzufhren. Kompass: In der aktuellen Version des Windows Phone 7 ist ein API fr den Zugri aus diese Sensordaten nicht enthalten. Proximity: Mit dem Nherungssenor wird ermittelt, ob ein Objekt einen Abstand vom 15mm zum Sensor unterschreitet. Der Proximity-Sensore ndet unter anderem Verwendung um zu ermitteln, ob sich das Gert bei einem laufenden Telefonat am Ohr bendet oder nicht. Das System reagiert mit Aktivierung bzw. Deaktivierung des Displays. Lichtsensor: Dient zur Ermittlung der Strke des umgebenden Lichtes und wird zur automatischen Anpassung der Helligkeit des Displays verwendet. Auch hier bietet die API aktuell keine Zugrismglichkeiten. Kamera Alle Windows Phone 7 besitzen eine Kamera mit mindestens 5 Megapixeln, einem Autofokus und Blitzlicht. Auch hier gibt es eine API um diese Funktionalitt in der eigenen Applikation zu nutzen. Netzwerkverbindungen Die Art der aktuell verfgbaren Daten- bzw. Netzwerkverbindung ist fr den Entwickler, was den Zugri ber die reinen APIs angeht, im Grunde genommen Homogen. Trotzdem soll der Vollstndigkeit halber erwhnt werden, dass das Windows Phone 7, genau wie anderer Smartsphones auch, mehrere Arten von Netzwerkverbindungen untersttzt. Allerdings sieht die API hier vom Ansatz her nicht vor, unterschiedliche Applikationsverhalten bei unterschiedlichen Verbindungsarten zu untersttzen. Die genau verwendeten Datennetztechnologien knnen, aufgrund regionaler Unterschiede, tatschlich von Gerte zu Gerte variieren. Allerdings muss jedes Windows Phone 7 ber die regional bliche Datennetztechnologie und WLAN verfgen. Einschrnkungen Hinsichtlich der im Windows Phone 7 eingesetzten Hardware und deren Anwendungsmglichkeit gibt es, fr Entwickler und fr Anwender gleichermaen, aktuell noch einige Einschrnkungen. Bluetooth erlaubt nur die Verbindung zu einem Headset. Es ist also nicht mglich Fotos oder sonstige Daten per Bluetooth an andere Gerte zu bertragen. Auch eine Nutzung des Windows Phone 7 per USB als mobiler Datentrger ist vom Hersteller aus derzeit nicht vorgesehen.
Ronny Schleicher
Seite 12 von 77
3. Windows Phone 7
3.3.1 Silverlight
Silverlight ist im Windows Phone 7 Kontext als Framework zur Anwendungsentwicklung zu verstehen und lst die bis bisher verwendeten Windows Forms ab. Vorteile und Grnde fr den Einsatz von Silverlight gegenber Windows Forms sind unter anderem[Mic11h]: Hierarchische Steuerelementen: Im Gegensatz zu Windows Forms, das die Steuerelemente nur ach darstellen kann, ist es mit Silverlight mglich, Steuerelement zu Gruppieren und hierarchische Darzustellen. Damit wird eine hohe Flexibilitt der Steuerelemente erreicht und es sind dynamische Oberchen, exible Styles und Layouts mglich. Grakdarstellung durch Vectoren: Da Windows Forms auf Pixelbasis arbeiten, ist das skalieren der Oberche ohne Verpixelung nicht ohne weiteres mglich. Die Darstellung der SilverlightElemente erfolgt dagegen auf Vektorbasis und lst somit dieses Problem. Animationen: Silverlight untersttzt von Haus aus Animationen, mit denen ansprechende Benutzeroberchen fr Endanwender erstellt werden knnen. Trennung von Design und Animationen: Eine Trennung von Oberchengestaltung (Markup), und dem dazugehrigem Quellcode (Code-Behind), ist Bestandteil des Entwicklungsmodells von Silverlight. Die Oberche wird dabei in XAML erstellt, whrend die Funktionalitt in der dazugehrigen Quellcodedatei untergebracht ist. In Kapitel 5.2 wird dieses Konzept nher beschrieben. Silverlight wurde von Anfang an als Sandbox7 konzipiert und wird aktuell als Browsererweiterung eingesetzt. Dies unterscheidet sich nicht gravierend vom Einsatz in einem geschlossenen System, wie Windows Phone 7, da auch hier nur die eingeschrnkte API des .NET Compact Framework 3.5 zur Verfgung steht und die laufenden Applikationen hnlich eingeschrnkte Rechte besitzen.
http://de.wikipedia.org/wiki/Sandbox
Ronny Schleicher
Seite 13 von 77
3. Windows Phone 7
Hinzu kommt, dass Silverlight lediglich auf einer Teilmenge der WPF 8 basiert, was wiederum eine gute Voraussetzung fr den Einsatz auf nicht so leistungsfhiger Hardware, wie der bei Smartphones, ist.
3.3.2 XNA
Das XNA-Framework ist ein fester Bestandteil des Windows Phone 7 und stellt aktuell die Spiele-Plattform dar, die von Entwicklern genutzt wird, um Spiele fr die XBOX 360 und fr das Windows Phone 7 zu programmieren. Allerdings ist das XNA-Framework nicht als einzelne Bibliotheken-Sammlung erhltlich, sondern ist im Lieferumfang des XNA Game Studio 4.0 9 enthalten. Das XNA Gamestudio 4.0 ist wiederum eine Erweiterung des Visual Studio 2010 und integriert die ntigen Bibliotheken, Dienstprogramme, Projektvorlagen und Dokumentationen in die eigentliche Entwicklungsumgebung. Der Programmcode wird also im Visual Studio 2010 geschrieben. Im XNA Framework sind alle ntigen Klassen und Bibliotheken enthalten, die ntig sind, um umfangreiche 2D- und 3D-Spiele zu implementieren. Allerdings ist XNA keine Game-Engine, die ein Design via drag-and-drop ermglicht. Es stellt vielmehr die Basis dar, auf der eine solche Game-Engine zu entwickelt werden kann. Auerdem stellt XNA keine Steuerelement und Controls wie z.B. Buttons oder ListBoxes bereit. Falls man Steuerelemente bentigt, mssen diese von Hand implementiert werden. Alternativ dazu ist es mglich, auch vorhandene Bibliotheken fremder Quellen zu nutzen.
Windows Presentation Foundation http://msdn.microsoft.com/de-de/library/bb200104.aspx 10 Release to Web - Software-Release die per Download zur Verfgung gestellt werden.
9
Ronny Schleicher
Seite 14 von 77
3. Windows Phone 7
3.4.1 C#
C# wird in der Version 4.0 untersttzt und ist die mit Abstand am meistens genutzte Sprache in der Windows Phone 7 Entwicklung. Jede Beispielimplementierung im MSDN ist in C# zu nden und auch die meisten Webcasts11 nutzen diesen Sprache fr Schulungszwecke. Besonders interessant ist, dass gerade die funktionalen Elemente dieser Sprache, wie Lambda Ausdrcke, die Einbettung von LINQ und anonyme Methoden, stark in den Vordergrund gestellt werden.
3.4.3 F#
Seit Anfang 2011 ist es mglich F# bei der Windows Phone 7 Entwicklung zu verwenden und so eine funktionalen Programmiersprache einzusetzen. Hierfr muss man lediglich die ntigen Online-Projektvorlagen installieren, damit das Visual Studio 2010 die Mglichkeit bietet, diesen Projekttyp anzulegen. Der Trend hin zur funktionaler Entwicklung hat damit seine erste eigene .NET Sprache hervorgebracht, die zudem die volle Untersttzung und Funktionalitt des .NET Frameworks bietet[Mic11c].
3.4.4 LINQ
LINQ, die Language INtegrated Query, ist eine Abfragesprache, die auf eine beliebige Datenquelle angewendet werden kann. Anders als bei SQL, bei der, bis auf einige exotische Ausnahmen, immer einen Datenbank die Basis der Abfrage darstellt, muss bei LINQ lediglich ein so genannter LINQ-Provider vorhanden sein, der die Datenquelle untersttzt. LINQ ist hierbei als einheitliches Datenzugrismodell zu sehen, das die Abfrage und Verarbeitung verschiedener Datenmodelle unter Verwendung des jeweiligen Providers ermglicht. Folgende LINQ-Provider sind Bestandteil des .NET Framework: LINQ to Objects Findet Verwendung fr Collections die IEnumerable implementieren. LINQ to XML Zugri auf XML Strukturen.
11
http://www.microsoft.com/germany/msdn/webcasts/default.mspx
Ronny Schleicher
Seite 15 von 77
3. Windows Phone 7
LINQ to SQL Die im .NET Framework mitgelieferten Provider arbeiten lediglich mit MSSQL Servern zusammen. Allerdings sind Provider fr andere Datenbanksysteme wie MySQL, Oracle oder SQLite in Entwicklung bzw. erhltlich. LINQ to Dataset Bezieht sich auf Daten im einem Dataset[Mic11e]. LINQ to Entities Bietet die Mglichkeit Abfragen fr konzeptionelle Modelle im Entity Framework zu erstellen[Mic11d]. Interessant ist auch, dass Abfragen durch LINQ zum bersetzungszeitpunkt mit Hilfe des jeweiligen LINQ-Providers geprft und optimiert werden. Anders als bei SQL ndet also keine Interpretation des Statements zur Laufzeit statt. Dies ermglicht eine sehr eziente Verarbeitung der LINQ-Statements im laufenden Programm. Alternative LINQ-Provider LINQ stellt dabei keine geschlossenen, auf Microsoft Produkte beschrnkte, Technologie dar. Weitere, teilweise noch in der Entwicklung oder dem Beta-Stadium bendlichen 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 fr relative viele ehemalige Windows Mobile 6.x Entwickler Neuland, obwohl es im .NET Compact Framework 3.5, wenn auch in eingeschrnkter Form, bereits vorhanden war. Ursache dafr ist, dass lediglich der .NET Compact Framework 2.0 im Lieferumfang von Windows Mobile 6.x enthalten war. Ein ROM Update der Endgerte auf den .NET Compact Framework 3.5 in Korrespondenz mit mglichen nderungen an der eigenen Software schien den Aufwand gegenber den Vorteilen, den man sich durch LINQ und anderer neuer Funktionalitt versprach, nicht zu rechtfertigen.
Ronny Schleicher
Seite 16 von 77
3. Windows Phone 7
12 13
Ronny Schleicher
Seite 17 von 77
3. Windows Phone 7
kann lokal installiert oder online genutzt werden. Zustzlich stehen ozielle WebCast und Online-Tutorien zur Verfgung. Die kostenlose Variante Visual Studio 2010 Express Edition14 , die fr die Entwicklung von Windows Phone 7 Applikationen prinzipiell ausreicht, wird bereits mit allen ntigen Softwarekomponenten angeboten, so dass eine Nachinstallation zustzlicher Softwarekomponenten hier nicht ntig ist. Bei den kostenpichtigen Varienten15 muss gegebenenfalls das Paket Windows Phone Developer Tools RTW 16 nachinstalliert werden, da der Windows Phone 7 SDK17 zum Release-Zeitpunkt der kommerziellen Versionen noch nicht zur Verfgung stand. Da der Windows Phone 7 SDK, egal ob mit oder ohne Nachinstallation, eine integrierte Komponente des Visual Studio 2010 ist, stehen in den kommerziellen Varianten alle Online-Updates, Online-Vorlagen und andere Erweiterungen zur Verfgung. Auch Funktionalitten, wie die Anbindung an den Team Fundation Server18 , staische Codeanalyse sowie die integrierten Architektur und Modellierungswerkzeuge, sind fr die Windows Phone 7 Projekte nutzbar. Hinweis zur Verwendung von F#: F# kann aktuell nicht als eine Erweiterung mit einem RTW-Paket, so wie Visual Basic, nachinstalliert werden. Die einzige Mglichkeit, die Spracherweiterungen zu installieren, besteht in der Auswahl einer OnlineProjekt-Vorlage, die diese Sprache verwendet. Allerdings stehen in der kostenlosen Variante Visual Studio 2010 Express Edition Online-Vorlagen fr Projekte nur eingeschrnkt zu Verfgung. Demzufolge ist es nicht ohne weiteres mglich F#-Projekte in der Express Edition zu verwenden. F# als Programmiersprache fr Windows Phone 7 kann demzufolge nur fr die kostenpichtigen Varianten des Visual Studio 2010, die Online-Vorlagen uneingeschrnkt untersttzen, eingesetzt werden.
Ronny Schleicher
Seite 18 von 77
3. Windows Phone 7
2010 integriert. Das bedeutet, dass es mglich ist, im Visual Studio 2010 einzelne Dateien oder komplette Projekte direkt mit Expression Blend 4 zu nen und zu bearbeiten. Allerdings ist Expression Blend 4 in keiner Variante kostenlos erhltlich, sondern nur als kostenpichtige Software separat zu beziehen oder in bestimmten kostenpichtigen Varianten des Visual Studio 2010 im Lieferumfang enthalten. Es ist auch nicht die Aufgabe von Expression Blend 4 den Oberchen-Designer im Visual Studio 2010 zu ersetzen. Oberchen-Design mit Expression Blend 4 ist im Grunde genommen eine anderer und sehr leistungsfhige Herangehensweise Silverlight-Oberchen zu entwickeln. Als Sprache fr das Windows Phone 7 wird C# untersttzt, wobei von Erweiterungen ausgegangen werden kann.
21
http://www.memeapps.com
Ronny Schleicher
Seite 19 von 77
3. Windows Phone 7
Expression Blend 4 wurde zum Gestalten der Oberchen eingesetzt. Obwohl der Einarbeitungsaufwand bei Expression Blend 4 beachtlich sein kann, wenn man mit dieser Art von Software noch nicht gearbeitet hat, sind die Mglichkeiten, die geboten werden, enorm. Schnelles Prototypen der Oberchen in Kombination mit dem Simulator und der guten Vorschau in Expression Blend 4 egalisiert rasch die Einarbeitungszeit und fhrt im Bereich der Oberchengestaltung zu sehr guten Ergebnissen. Viele Entwrfe der Windows Phone 7 Spirit Applikation dieser Arbeit sind mit Expression Blend 4 entstanden. Auch die nale Oberche wurde mit Expression Blend 4 entworfen und anschlieend mit dem Visual Studio 2010 implementiert. Gerade die Integration von Expression Blend 4 in das Visual Studio 2010 beschleunigt die Design- und Implementierungsarbeit enorm. Allerdings muss erwhnt werden, dass das erzielte Ergebnis auch ohne Expression Blend 4 mglich gewesen wre, da die Spirit-Applikation im Bereich der Oberche letztendlich Daten reprsentiert und auf Animationen und Eekte weitgehend verzichtet. Doch selbst bei relativ nchternen Oberchen erleichtert Expression Blend 4 die Gestaltung mitunter erheblich.
Ronny Schleicher
Seite 20 von 77
4.1.1 REST
Die Bezeichnung REST, ein Akronym fr Representational State Transfer, wurde in der Dissertation von Roy T. Fielding1 eingefhrt und beschreibt einen eine spezielle Softwarearchitektur, die sich durch die zentralen Elemente Ressourcen und Reprsentationen, verteilte Hypermedia-Informationssysteme und einheitliche Schnittstellen auszeichnet.2 3 REST bildet fr den Cloud-Service der FH-Schmalkalden ein zentrales Architekturmerkmal. Jede Client-Anwendung muss in der Lage sein, die dort implementierte REST-Schnittstelle, die auf dem Http-Protokoll basiert, entsprechend der Spezikation zu bedienen.
4.1.2 JSON
Ein bereitgestelltes Datenformat des Cloud-Service ist JSON, die JavaScript Object Notation.4 Hierbei handelt es sich um ein sehr kompaktes Datenformat, das in diesem Fall als Container fr die eigentlichen Nutzdaten dient. Mit dem Setzen des Content-Type der http Anfrage auf application/json wird das Datenformat fr die jeweilige Anfrage auf JSON festgelegt.
1 2
Ronny Schleicher
Seite 21 von 77
4.1.3 XML
Neben JSON besteht auch die Mglichkeit, die Daten im XML-Format5 zu empfangen. Hierfr muss lediglich der Content-Type der http Anfrage auf application/xml gesetzt werden. Die empfangene XML-Datenstruktur entspricht vom Inhalt her genau dem, was auch ber JSON zurckgeliefert wird.
4.2.1 WebClient-Klasse
Unter Verwendung der Klasse WebClient wird in Listing 4.1 ein asynchroner WebRequest gestartet. In Codezeile 11 wird ein Objekt der Klasse WebClient erzeugt. Anschlieend wird in Codezeile 12 das Event OpenReadCompleted abonniert. Das geschieht mit Hilfe des += Operator und des EventHandlers OpenReadCompletedEventHandler. Als Parameter wird dem EventHandler im Konstruktor die Methode onEventOpenReadCompleted bergeben, die beim Auftreten des abonnierten Events gerufen werden soll. Der EventHandler erzeugt hierfr ein Delegate6 , um Event um Methode zu verbinden.
5 6
Extensible Markup Language, http://www.w3.org/XML/ Als Delegate bezeichnet man ein Objekt, das einen Zeiger auf Methode kapselt.
Ronny Schleicher
Seite 22 von 77
In Codezeile 13 wird dann der eigentliche Web-Request abgesetzt. Nachdem die angeforderte Daten vollstndig empfangen wurden, wird der Event onEventOpenRead Completed ausgelst und demzufolge die Methode onEventOpenReadCompleted gerufen, in der das Ergebnis der Anfrage ab Codezeile 20 verarbeitet werden kann. Der Aufruf processData steht hier symbolisch fr eine Methode, die die Daten verarbeitet. Listing 4.1: Web-Request mit C# und der Klasse System.Net.WebClient 1 // . . . 2 using System . Net ; 3 4 p u b l i c p a r t i a l c l a s s MainPage : P h o n e A p p l i c a t i o n P a g e 5 { 6 // . . . 7 U r i u r i = new U r i ( "http ://212.201.64.226:8080/ fhs -spirit/ news" ) ; 8 9 p r i v a t e void r e q u e s t D a t a ( ) 10 { 11 W e b C l i e n t wc = new W e b C l i e n t ( ) ; 12 wc . OpenReadCompleted += new Op enR ead Com pl eted Ev ent Han dle r ( onEventOpenReadCompleted ) ; 13 wc . OpenReadAsync ( u r i ) ; 14 } 15 16 p r i v a t e void onEventOpenReadCompleted ( o b j e c t s e n d e r , OpenReadCompletedEventArgs e ) 17 { 18 i f ( e . E r r o r == n u l l ) 19 { 20 System . IO . S t r e a m R e a d e r s r = new System . IO . S t r e a m R e a d e r (e . Result ) ; 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 Daten 22 processData ( sr ) ; 23 } 24 } 25 } Wichtig ist, dass bei dieser Vorgehensweise das Ergebnis des Web-Requests, also die Methode onEventOpenReadCompleted, im Mainthread der Windows Phone 7 Applikation ausgefhrt wird. Demzufolge ist die Applikation fr den Zeitraum, den sie fr die Verarbeitung der empfangenen Daten in der Methode bentigt, blockiert. Das Sequenzdiagramm 4.1 soll den genauen Ablauf noch einmal verdeutlichen.
Ronny Schleicher
Seite 23 von 77
Abbildung 4.1: Sequenzdiagramm mit dem Ablauf der Kommunikation unter Verwendung der Klasse WebClient. Wenn in der Methode onEventOpenReadCompleted die Menge der zu verarbeiten Daten relativ gering ist und so gewhrleistet wird, dass der Mainthread der Windows Phone 7 Applikation und somit die gesamte Applikation nicht zu lange blockiert ist, ist dieser Ansatz akzeptabel. Auch ist es mglich, dass das Blockieren der Applikation fr den Zeitraum der Verarbeitung gewollt ist und mit Hilfe eines Progressbars visualisiert wird. Eine dritte Mglichkeit ist das hndische Erzeugen eines Workerthreads in der Methode onEventOpenReadCompleted, der die asynchrone Verarbeitung der Daten im Hintergrund bernimmt. Dies bedeutet allerdings einen direkten Mehraufwand in der Implementierung.
4.2.2 HttpWebRequest-Klasse
Eine andere Mglichkeit, einen Web-Request abzusetzen, bietet die Klasse HttpWebRequest. Hier wird das Ergebnis des Web-Request nicht ber das EventHandling behandelt, sondern mit einem Callback-Mechanismus verarbeitet.
Ronny Schleicher
Seite 24 von 77
Auch hier steht der Aufruf processData symbolisch fr eine Methode, die die Daten verarbeitet. Listing 4.2: Web-Request mit C# und der Klasse System.Net.HttpWebRequest 1 2 using System . Net ; 3 4 p u b l i c p a r t i a l c l a s s MainPage : P h o n e A p p l i c a t i o n P a g e 5 { 6 // . . . 7 U r i u r i = new U r i ( "http ://212.201.64.226:8080/ fhs -spirit/ news" ) ; 8 9 p r i v a t e void r e q u e s t D a t a ( ) 10 { 11 HttpWebRequest wr = ( HttpWebRequest ) HttpWebRequest . Create ( u r i ) ; 12 wr . Method = "GET" ; 13 wr . B e g i n G e t R e s p o n s e ( r e s p o n s e C a l l b a c k , httpWebRequest ) ; 14 } 15 16 p r i v a t e void r e s p o n s e C a l l b a c k ( o b j e c t s e n d e r , OpenReadCompletedEventArgs e ) 17 { 18 i f ( e . E r r o r == n u l l ) 19 { 20 WebResponse r e s p o n s e = httpWebRequest . EndGetResponse ( r e s u l t ) ; 21 System . IO . Stream s t r e a m = r e s p o n s e . GetResponseStream ( ) ; 22 System . IO . S t r e a m R e a d e r s r = new System . IO . StreamReader ( stream ) ; 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 Daten 24 processData ( sr ) ; 25 Dispatcher . BeginInvoke ( _setLabelContent , strContent ); 26 } 27 } 28 } Der wichtigste Unterschied im Vergleich zur Verwendung der WebClient Klasse ist allerdings nicht die Tatsache, dass statt des EventHandling-Mechanismus eine callback-Methode mit Hilfe eines Delegates gerufen wird, sondern dass die verwendetet Callback-Methode responseCallback immer in einem eigenen Workthread abgearbeitet wird.
Ronny Schleicher
Seite 25 von 77
Daraus folgt, dass die Verarbeitung der empfangenen Daten in der Methode response Callback() nicht dazu fhrt, dass der Mainthread der Windows Phone 7 Applikation blockiert. Der genaue Ablauf wird im Sequenzdiagramm 4.2 noch einmal dargestellt.
Abbildung 4.2: Sequenzdiagramm mit dem Ablauf der Kommunikation unter Verwendung der Klasse WebRequest. Da die Ausfhrung der Methode responseCallback und somit auch die Abarbeitung der empfangenen Daten in einem eigenen Workthread stattndet, ist ein blockieren des Mainthread bei diesem Ansatz nicht mglich. Es ist in diesem Szenario also angedacht, dass die Windows Phone 7 Applikation ber das UI7 , und damit ber den Mainthread, weiter Eingaben des Benutzers entgegen nehmen kann und im Hintergrund anderer Auftrge in eigenen Workerthreads abarbeitet. Wichtig ist in diesem Zusammenhang auch, dass es nicht mglich ist, aus einem Workerthread heraus direkt auf UI-Elemente, zum Beispiel List-Boxen oder EditFelder, zuzugreifen. Die Ausfhrung des Zugris auf das UI-Element muss immer im MainThread sattnden. Aus diesem Grund wird von .NET Compact Framework 3.5 der Aufruf Dispatcher.BeginInvoke angeboten, der es ermglicht einen Delegaten asynchron auf dem Thread ausfhrt, dem der Dispatcher zugeordnet ist. So kann man relative einfach sicherstellen, dass bestimmte Aufrufe auch im richtigen Thread ausgefhrt werden.
7
User Interface
Ronny Schleicher
Seite 26 von 77
Listing 4.3 zeigt eine Beispielimplementierung der Methode processData, die wiederum die Methode Dispatcher.BeginInvoke einsetzt, um aus einem Workerthread heraus ein UI-Elemente zu aktualisieren: Listing 4.3: Dispatcher.BeginInvoke unter Verwendung des Lambda Operators 1 2 p r i v a t e void p r o c e s s D a t a ( System . IO . S t r e a m R e a d e r s r ) 3 { 4 // V e r a r b e i t u n g d e r Daten 5 // . . . 6 D i s p a t c h e r . B e g i n I n v o k e ( ( ) => 7 { 8 // D i e s e r Code w i r d im M a i n t h r e a d a u s g e f u e h r t 9 mainpage . T e x t E x 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 sich rechts vom Operator bendet, und in dem der Code fr den Mainthread vorhanden ist, als anonyme Methode behandelt. Da dieser Aufruf ohne Parameter ausgefhrt werden soll steht links von Lambda Operator lediglich (). Die Entscheidung, ob eine asynchrone Verarbeitung durch Workerthreads fr die eigene Applikation ntig ist, muss von Fall zu Fall neu Entschieden werden. Ein UI, die fr den Anwender zwecks Eingaben oder Interaktion immer zur Verfgung stehen muss, ist auf den ersten Blick eine interessante Funktionalitt, die allerdings auch durch das eigentliche Programm richtig behandelt werden muss. Insbesondere bei Mehrfacheingaben durch den Benutzer und laufenden Workerthreads muss die eigentliche Anwendungslogik dahingehend konzipiert sein und diesen Ansprchen gerecht werden. Fr groe Datenmengen, die im Hintergrund aufbereitet und erst dann an das UI bergeben werden sollen, ist dieses Modell ein guter Ansatz.
Ronny Schleicher
Seite 27 von 77
Namespaces bzw. Namesrume werden im .NET Framework 3.5 eingesetzte, um Funktionsgruppen sinnvoll zu gliedern. 9 http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjson serializer(v=VS.90).aspx 10 www.json.org
Ronny Schleicher
Seite 28 von 77
JsonFx: http://jsonfx.net/download/ JsonExSerializer: http://code.google.com/p/jsonexserializer/ JSON@CodeTitans: http://codetitans.codeplex.com/ uent-json: http://code.google.com/p/fluent-json/ Interessanterweise untersttzen von diesen 11 Projekten nur Json.NET - LINQ to JSON und JSON@CodeTitans den im Windows Phone 7 und eingesetzten .NET Compact Framework 3.5 explizit. Ursache dafr ist das Fehler einiger Klassen und Namenspaces im .NET Compact Framework 3.5 , die hug in den Implementierungen eingesetzt werden. Falls die Anzahl der Windows Phone 7 Gerte zuknftig eine grere Rolle spielen sollte, bleibt zu hoen, dass hier eine grere Sensibilisierung im Bereich der .NET Compact Framework 3.5 und den folgenden Versionen stattndet. Auerdem war es mglich bei einigen Projekten die Implementierung so anzupassen, dass eine Integration in das Windows Phone 7 funktionierte. Allerdings ist eine solche Vorgehensweise meist sehr aufwendig und nicht ohne Risiken. Zuerst muss bei geplanten nderungen identiziert werden, welches Lizenz-Modell hinter dem Open-Source-Projekt steht, damit klar ist ob und in welcher Form nderungen am Quellcode zulssig sind. Falls hier Klarheit besteht muss im nchsten Schritt die Implementierung des Open-Source-Projektes zu einem groen Teil durchdrungen werden, um sinnvolle nderungen an den fremden Quellen vornehmen zu knnen. Zu guter Letzt kommt es nicht selten vor, dass die nderungen bei jeder neuen Version des angepassten Quellcodes nachgezogen werden mssen, falls sie vom Projektteam der Open-Source-Software nicht bercksichtigt werden. Hier kann somit eine neue Fehlerquelle entstehen, die Beachtung nden muss.
11 12
http://www.codeproject.com http://sourceforge.net/
Ronny Schleicher
Seite 29 von 77
13
http://james.newtonking.com/
Ronny Schleicher
Seite 30 von 77
5.1 UI Design
Der Aufbau der Benutzeroberche einer Windows Phone 7 Applikation in Kombination mit Silverlight nutzt ein Rahmen- und Seitenmodell, auch Frame- and Pagemodel, das im wesentlichem der Idee des Silverlight Page Model 1 entspricht. Nachfolgend wird nur noch der Begri Frame- and Page Model verwendet. Einzelne Seiten werden als Pages, und untergeordneten Seiten als Sub-Pages, bezeichnet. Diese Nomenklatur entspricht den verbreiteten Bezeichnungen in der englischsprachigen MSDN und bekannten Foren, sowie den Bezeichner im .NET Compact Framework 3.5 und im Quellcode den Visual Studio 2010 und Expression Blend 4 Projektdateien. Der Frame, auf den die Pages dargestellt werden, muss von der Applikation angelegt werden, um berhaupt Pages anzeigen zu knnen. In diesen Zusammenhang wird auch von sogenannten Rootframe gesprochen. Das Erstellen des ntigen Quellcodes bernehmen die Entwicklungsumgebungen Visual Studio 2010 und Expression Blend 4, ohne das fr Standartapplikation hier Code gendert werden muss. Instanziiert wird der Rootframe in der Methode private void InitializePhone Application() in der Datei App.xaml.cs. Wirklich angewendet bzw. genutzt wird er allerdings erste wesentlich spter in der Methode private void CompleteIni tializephoneApplication(), ebenfalls lokalisiert in der Datei App.xaml.cs, nachdem die Windows Phone 7 Applikation vollstndig initialisiert wurde. Ursache dafr ist, dass beim Initialisieren von Windows Phone 7 Applikation solange ein Begrungsbildschirm eingeblendet wird, bis die Applikation vollstndig geladen ist. Erst danach wird mit dem Rendering des Rootframes und somit mit der Darstellung der Inhalte begonnen wird. Andersfalls wrde man sonst whrend des Ladevorgangs eventuell einen schwarzen Bildschirm oder hnliche unschne Dinge sehen.
1
http://msdn.microsoft.com/en-us/library/cc838245(v=vs.95).aspx
Ronny Schleicher
Seite 31 von 77
Wie Abbildung 5.1 zeigt, bildet die Grundlage fr das Frame- and Page Model ein Frame der als Container fr 1-n Pages dient. Durch diese Seiten kann man, angelehnt an das Navigieren durch Webseites, vor- und zurckblttern. Auf den einzelnen Pages werden 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 Rootframe sind grn umrande dargestellt. Die Darstellung der Pages hintereinander soll noch einmal die 1-n Beziehung zwischen dem Rootframe zu den Pages verdeutlichen. Allerdings wird in einer laufenden Applikation, mit Ausnahme von speziellen Designs als Vorschau (siehe Kapitel 5.1.1 fortlaufend), immer nur eine Page komplett dargestellt.
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 2010 und Expression Blend 4 vollstndig untersttzt und unterscheiden sich hinsichtlich der Einsatzmglichkeiten erheblich voneinander.
Ronny Schleicher
Seite 32 von 77
Beim Page-Design handelt es sich um das einfachste Design, welches vom Windows Phone 7 bzw. der Entwicklungsumgebung Visual Studio 2010 angeboten wird. Die Darstellung beschrnkt sich hier auf eine Page, die alle relevanten Steuerelemente enthlt. Das Page-Design eignet sich besonders fr das Erfassen von Nutzereingaben. Das Windows Phone 7 nutzt dieses Design unter anderem, wenn Kurznachrichten geschrieben werden und im Bereich der Einstellungen bei der Sub-Page zum Einstellen der Uhrzeit. Pivot Das Pivot-Design besteht aus einer oder mehreren Pages. Durch berhren der berschriften oder durch Schiebebewegungen nach links oder rechts kann durch die einzelnen Pages navigiert werden. Die Pages benden sich immer nebeneinander und es wird bei diesem Design nur der Inhalt einer Page angezeigt. Verwendet wird das Pivot-Design bei den meisten Funktionen und Mens, die das Windows Phone 7 im Auslieferungszustand bietet. Hier wird sowohl die Variante mit nur einer Page, unter anderem bei der Telefonliste, als auch Varianten mit mehreren Pages, exemplarisch ist hier der integrierten Kalender zu nennen, eingesetzt. Panorama Wenn man sich das Panorama-Design betrachtet, sind auf der ersten Blick die Unterschiede zum Pivot-Design nur schwer zu erkennen. Vor allem wenn in einem neuen Visual Studio 2010 Projekt die beiden Design-Varianten ohne Testdaten betrachtet werden, ist eine Unterscheidung fast nicht mglich. Beide Design-Varianten stellen nebeneinander ein oder mehrere Pages dar. Durch Schiebebewegungen nach links und rechts ist, wie beim Pivot-Design auch, eine Navigation zwischen den einzelnen Pages mglich. Bei einer genaueren Untersuchung der Funktionalitt ergeben sich allerdings einige Unterschiede, gerade im Bereich der verwendeten Bedien- und Visualisierungskonzeption. Die Navigation zwischen den Pages, die Bestandteil der Panorama-Page ist, ist ausschlielich ber die Schiebebewegung mglich und nicht durch das Berhren der berschriften. Auch sind die berschriften der einzelnen Pages nicht komplett sichtbar und eine Page muss nicht zwangslug denn kompletten Darstellungsbereich verwenden. So ist es mglich durch die Schiebebewegungen nach links oder rechts schon Teile der benachbarten Page anzeigen, ohne komplett auf diese zu wechseln. Es ist also mglich, in dieser Design-Variante den Inhalt von mehr als einer Page gleichzeitig anzuzeigen. Verwendung ndet das Panorama-Design beim Windows Phone 7 im Auslieferungszustand unter anderem bei den Kontakten und Bildern. Ebenso sind der Marketplace zum Erwerb neuer Software und Musik, sowie der XBOX-Hub zum Erwerb von Spielen mit dem Panorama-Design umgesetzt. Auch zahlreiche Applikationen anderer Anbieter, die primre Informationen bereitstellen, verwenden dieses Design als oberstes Steuerelement in der Benutzerfhrung.
Ronny Schleicher
Seite 33 von 77
5.1.2 Bildschirmorientierung
Das Windows Phone 7 bietet mit Portrait 2 und Landscape 3 zwei Bildschirmorientierungen an, die in jeder Windows Phone 7 Applikation verwendet werden knnen. Die Standartorientierung fr die meisten im Windows Phone 7 integrierten Applikationen ist Portrait. Eine Ausnahme bildet das Fotograeren und die Wiedergabe von Videos, wo die Standartorientierung Landscape ist. Ein eher geringer Teil der Applikationen, wie die E-Mail-Verwaltung und der Internet Explorer nutzten beide Darstellungsarten in ihren Oberchen. Falls eine Applikation beide Bildschirmorientierungen untersttzten soll, muss dies schon zum Entwurfszeitpunkt, egal ob mit Silverlight (Kapitel 3.3.1) oder XNA (Kapitel 3.3.2) gearbeitet wird, beachtet werden. Unter Verwendung des Beschleunigungssensors (Kapitel 3.2) wird dafr ein Rotationsschwellwert 4 ermittelt, mit dessen Hilfe die aktuelle Orientierung der Applikation errechnet wird. Das Umschalten der Bildschirmorientierung erfolgt dann automatisch. Silverlight ist vom Ansatz her allerdings so konzipiert, dass lediglich eine Bildschirmorientierung untersttzt wird. Es ist aber trotzdem mglich mit speziellen Layouts5 und Implementierungsrichtlinien, welche in der MSDN zu nden sind, Applikationen zu entwickeln, die beide Darstellungsarten auf einer Page implementieren. Bei XNA ist die Standartorientierung Landscape, was allerdings im Quellcode per Parameter gendert werden kann. Ein Wechsel zwischen den Orientierungen wird vom XNA-Framework nicht untersttzt und muss komplett von Hand implementiert werden. Hierfr gibt es allerdings Beispielimplementierungen in der MSDN, die genutzt werden knnen. Portrait Bei der Portrait-Orientierung wird zwischen PortraitUp und PortraitDown unterschieden. PortraitUp bezeichnet die eigentliche Standartorientierung, bei der sich die kapazitiven Gertetasten (siehe Kapitel 3.2) an der Unterseite benden. Dreht man das Gert um 180 Grad auf den Kopf entspricht das der PortraitDown-Orientierung. Der Rotationsschwellwert fr einen Wechsel von Landscape zu Portrait betrgt 60 Grad nach links bzw. rechts. Wenn das Gert mit Landscape-Orientierung ach auf dem Tisch liegt reicht eine Vernderung von 30 Grad, um einen Orientierungswechsel hin zu Portrait auszulsen. Landscape Die Landscape-Orientierung unterscheidet intern zwischen LandscapeLeft, wo sich die kapazitiven Gertetasten an der rechten Seite des Bildschirms benden, und LandscapeRight, mit den Tasten an der linken Bildschirmseite.
2 3
Hochformat Querformat 4 Grenzwert fr die Bildschirmausrichtung in Grad, um von einer Orientierung in eine anderen zu wechseln. 5 Umsetzung meist mit einem Grid-Layout.
Ronny Schleicher
Seite 34 von 77
Um einen Wechsel von der Landscape-Orientierung zur Portrait-Orientierung auszulsen, Betrgt der Rotationsschwellwert von links bzw. rechts ebenfalls 60 Grad. Wenn das Gerte ach auf den Tisch betrgt der Rotationsschwellwert 30 Grad.
5.2 XAML
XAML6 ist eine deklarative Markupsprache. Sichtbare UI-Elemente knnen im deklarativen XAML-Markup erstellt und anschlieend die UI-Denition mithilfe von Code-Behind-Dateien, die ber partielle Klassendenitionen an das Markup geknpft sind, von der Laufzeitlogik getrennt werden. XAML stellt die Instanziierung von Objekten in einem spezischen Satz von in Assemblies denierten Untersttzungstypen direkt dar. Dieser Ansatz unterscheidet sich von anderen Markupsprachen, die in der Regel interpretierte werden. XAML ermglicht das Arbeiten an UI und Logik einer Anwendung zudem mit unterschiedliche Personen und unterschiedlichen Tools.7
Ronny Schleicher
Seite 35 von 77
5.2.2 Markup
Listing 5.1 deniert einen Button, der beim Ereignis Click die Methode buttonClick ausfhrt. Die Methode buttonClick ist im korrespondierenden Code-Behind implementiert, wie Listing 5.2 zeigt. Listing 5.1: Datei: Page.xaml <p h o n e : P h o n e A p p l i c a t i o n P a g e x : C l a s s=" WindowsPhoneApplication .Page" ... 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 " d : D e s i g n H e i g h t="480" d : D e s i g n W i d t h="728" 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"> <G r i d x:Name=" LayoutRoot " Background=" Transparent "> <Button C o n t e n t="Button" Name="button1" Margin=" 150 ,150 ,150 ,150" C l i c k=" button1_Click " /> </ G r i d> </ p h o n e : P h o n e A p p l i c a t i o n P a g e>
1 2 3 4 5 6 7 8 9 10
Hinweis: Listing 5.1 enthlt nur die wichtigsten und zum Verstndnis ntigen Elemente. Sonstige TAGS zum Denieren von Namensrumen und setzten von zustzlichen Attribute sind durch (...) substituiert worden. Das Attribute x:Class deniert den Klassennamen, SupportedOrientations deniert, welche Orientierung von dieser Page untersttzt wird. Als mgliche Werte sind "Landscape", "Portrait" oder "PortraitOrLandscape" anwendbar. Die eigentliche Orientierung des Bildschirms ist in dem Attribut Orientation="Landscape" festgelegt. Sich gegenseitig ausschlieende Kombinationen sind in der Konguration nicht mglich. d:DesignHeight="480" und d:DesignWidth="728" legen die Gre der Page fest. Mit tshell:SystemTray.IsVisible="True" wird festgelegt, dass beim Anzeigen der Page im Hochformat der Statusbar9 dauerhaft eingeblendet wird. Dies kann bei Applikationen, die grere Datenmengen ber die vorhandenen Datenverbindungen laden mssen, durchaus von Vorteil sein. Mit diesen Attributen sind die Umgebungsparameter der Page, die dargestellt werden soll, festgelegt. Der eigentliche Inhalt der Page wird zwischen <Grid und </Grid> beschrieben. Hier wird das sogenannte Root-Layout deniert. Dieses Grid-Layout dient als Basis fr die UI-Elemente, die in diesen Tag enthalten sind. Das Attribute x:Name="Layout Root" deniert den Namen des Layouts und mit Background="Transparent", dass das Layout einen transparenten Hintergrund hat. Die Zeile <Button ... /> wird ein Button erzeugt dessen Beschriftung durch das Attribute Content="Button" einfach auf "Button" gesetzt wird und dessen Objektname mit Name="button1" festgelegt wird. Mit Margin="150,150,150,150" wird der Abstand des UI-Elementes zum Rand des korrespondierenden Layouts festgelegt. Das Eingabeformat ist hier
9
Visualisiert mit kleinen Symbolen unter anderem die Signalstrke WLAN- und Datenverbindungen.
Ronny Schleicher
Seite 36 von 77
Abstand linker Rand, Abstand oberer Rand, Abstand rechter Rand, Abstand rechter Rand. Im Ergebnis stellt das Markup so eine recht einfache Mglichkeit da, ein UIElement zentriert dazustellen. Mit Click="button1_Click" wird das Ereignis von Typ Click mit der Methode "button1_Click" verknpft, die im entsprechenden Code-Behind in Listing 5.2 lokalisiert ist und in der die Behandlung des Ereignisses implementiert ist.
5.2.3 Code-Behind
Im Code-Behind des Markups aus Listing 5.1 bendet sich die Implementierung des Event-Handlers. Als Richtiglinie gilt hier, dass so wenig Quellcode wie mglich in die eigentliche Code-Behind-Datei geschrieben werden soll. Somit ist das Code-Behind als Bindeglied zwischen der UI und der eigentlichen Programmlogik zu sehen. Hinweis: Listing 5.2 enthlt eine komplett bersetzbare Implementierung der Klasse WindowsPhoneApplication. Allerdings sind aus platzgrnden die ntigen using Anweisungen durch (...) substituiert worden. Listing 5.2: Inhalt des Code-Behind in C#. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 using System ; ... namespace W i n d o w s P h o n e A p p l i c a t i o n { p u b l i c p a r t i a l c l a s s Page : P h o n e A p p l i c a t i o n P a g e { p u b l i c Page ( ) { InitializeComponent () ; } p r i v a t e void b u t t o n C l i c k ( o b j e c t s e n d e r , R o u t e d E v e n t A r g s e ) { MessageBox . Show ( "Hello World" ) ; } } } In Listing 5.2 ist zu sehen, dass der Ereignisname und der Name des zu verwendenden Handlers im Markup angegeben sind (Listing 5.1), whrend der Quellcode, der den Event-Handler implementiert, im Code-Behind deniert wird. In Codezeile 5 ist die Klasse WindowsPhoneApplication zustzlich mit dem Schlsselwort partial als partieller Typ deniert. Das bedeutet, dass sich die Implementierung der Klasse ber mehrere Abschnitte verteilen kann und diese in unterschiedlichen Dateien lokalisiert sind. Die Notwendigkeit von partiellen Klassen liegt darin begrndet, das neben der Implementierung im Code-Behind auch aus dem Markup Quellcodedateien generiert werden, die Teile der Implementierung der Klasse WindowsPhoneApplication sind.
Ronny Schleicher
Seite 37 von 77
Hier wird auch noch einmal deutlich, dass Markups nicht zur Laufzeit interpretiert werden, sondern in Quellcode umgewandelt und bersetzt werden. In Codezeile 11 beginnt die Implementierung des Event-Handlers der eine Message-Box mit dem Inhalt Hello World erzeugt.
Abbildung 5.2: Screenshot Windows Phone 7 Emulator mit dem erzeugten Button. Nach Klick auf den in Listing 5.1 denierten Button erscheint die im Event-Handler in Listing 5.2 implementierte Message-Box.
Ronny Schleicher
Seite 38 von 77
Ronny Schleicher
Seite 39 von 77
Modell gebunden wird. Unter Modell ist hier ein Klasse zu verstehen, die vom Interface INotifyPropertyChanged ableitet ist, einen PropertyChangedEventHandler implementiert und mit Hilfe von Properties 10 Daten aufnehmen und zur Verfgung stellen kann. Auf Applikationsseite wird nun lediglich das Modell manipuliert, ohne dass ein direkter Zugri auf die UI-Elemente implementiert werden muss. Besonders bei zusammengesetzten UI-Elementen, die logisch zu einem Modell zusammengefasst werden knnen, ist das eine leistungsfhige Technik, um Daten in der UI zu reprsentieren und dabei klar zwischen UI- und Applikationslogik zu trennen. Wenn Datenquellen und Modelle im Markup fr die UI-Elemente verwendet werden, ergibt sich ein weiterer Vorteil. Es ist nun mglich eine weitere Datenquellen anzugeben, die nur zum Entwurfszeitpunkt ausgewertet wird. Das bedeutete, dass die UI-Elemente, die mit Modell verknpft sind, schon zum Entwurfszeitpunkt im Designer des Visual Studio 2010 oder Expression Blend 4 diese Testdaten anzeigen, ohne dass die Applikation vorher bersetzt werden muss. Man entwirft seine Oberche also nicht einfach mit leeren List- oder Combo-Boxen, sondern sieht schon im Designprozess, wie das UI gefllt mit Daten aussieht. Als Basis fr diesen sogenannte Design-DataContext dient eine XAML-Datei, die, wie eingangs erwhnt, im Markup der Page deniert werden muss. In dieser Datei werden nun die entsprechenden Modelle mit Daten gefllt und dann in der Entwurfsphase vom Designer im Visual Studio 2010 oder Expression Blend 4 verwendet. Allerdings funktioniert der Design-DataContext zum jetzigen Zeitpunkt nicht korrekt, wenn die Modell mit der Programmiersprache F# implementiert sind. Ursache hierfr sind Verweise, die vom Interpreter der XAML-Datenquelle seltsamerweise nicht korrekt aufgelst werden knnen. Das Problem ist bekannt und es ist davon auszugehen, dass es mit dem nchsten Hotx bzw. Servicepack behoben wird, da die Sprache F# im speziellen und die gemischtsprachige Programmierung des .NET Compact Framework 3.5 im Allgemeinen, Aushngeschilder der Windows Phone 7 Softwarewareentwicklung sind. Aktuell stellt dieses Problem allerdings eine erhebliche Einschrnkung dar, wenn man mit einem Design-DataContext arbeitet und auch die Werkzeuge wie Expression Blend 4 entsprechend einsetzt.
10
Membervariablen einer Klassen die mit gettern und bzw. oder settern verfgbar sind.
Ronny Schleicher
Seite 40 von 77
Als Programmiersprache fr die Code-Behind-Dateien wird C# verwendet. Der Grund dafr ist, das C# in allen Visual Studio 2010 und Expression Blend 4 Varianten untersttzt wird und durch seine Integration eine sehr gut Mglichkeit fr die Umsetzung von Anforderungen mit beiden Werkzeugen bietet. Fr die Modelle knnen prinzipiell alle .NET Sprachen genutzt werden, die zur Verfgung stehen. Im Hinblick auf moderne funktionale und imperative Sprachen wird fr die Modelle F# und C# verwendet. Im Kapitel 6.4.3 ndet ein Vergleich der beiden Sprachen in Bezug auf die Implementierung der Modellen statt. Neben der Trennung der Modelle durch Namesrume und verschiedene Sprachen ist es natrlich auch mglich, die Modelle in einzelnen DLLs zu separieren. Diese Herangehensweise bietet meist die Grundlage fr eine saubere Trennung zwischen den Modellen, der UI und der eigentlichen Applikationslogik. Ringabhngigkeiten fallen sofort durch Fehlermeldungen auf und demzufolge wird die gewnschte Unabhngigkeit zwischen den einzelnen Programmteilen in hohem Mae gewhrleistet. In der Windows Phone 7 Spirit Applikation sind deshalb nicht nur die Modelle sondern auch die Applikationslogik in eigenen DLLs lokalisiert.
Ronny Schleicher
Seite 41 von 77
6.1 Systembersicht
Nachfolgend wird ein Top-Down-Entwurf der Windows Phone 7 Spirit Applikation dargestellt. Hierbei sollen die implementierten Komponenten und die Interaktion der Komponenten miteinander verdeutlicht werden. Unter Komponente werden in diesem Zusammenhang immer Teile von Software verstanden, die eine logische Zusammengehrigkeit besitzen und in einer oder mehreren DLLs lokalisiert sind. Das Windows Phone 7 Spirit Applikation ist vom Systementwurf her in drei Komponenten unterteilt, die in vier DLL implementiert sind. Die Tabelle 6.1 stellt hierbei eine bersicht ber die Komponenten und die in ihnen verwendeten Technologien dar: Komponente FHSSpirit-App FHSSpirit-DataControl Modelle verwend. Sprachen und Techniken XAML C# LINQ C# F# C# Anzahl der DLLs 1 1 2
Tabelle 6.1: bersicht ber die Komponenten der Windows Phone 7 Spirit Applikation mit den verwendeten Technologien. Die FHSSpirit-App (Abschnitt 6.2) stellt hierbei die umfangreichste Komponente dar und beinhaltet das Frontend. Das FHSSpirit-DataControl (Abschnitt 6.3) implementiert das Backend und die Modelle (Abschnitt 6.4) implementieren die eigentlichen Datenmodell, die in der Windows Phone 7 Spirit Applikation verwendet werden.
Ronny Schleicher
Seite 42 von 77
Abbildung 6.1: Komponentendiagramm der Windows Phone 7 Spirit Applikation mit den Interfaces.
Swimlanes dienen in UML2.0 dazu, organisatorische Zustndigkeiten und Gruppierungen in UML Diagrammen besser darstellen zu knnen.
Ronny Schleicher
Seite 43 von 77
Im oberen Teil in Abbildung 6.1 wird mit der Swimlane Benutzer die Schnittstelle zur eigentlichen UI und zum Windows Phone 7 an und fr sich dargestellt. Sie soll verdeutlichen, das die Windows Phone 7 Spirit Applikation nicht die komplette Benutzerinteraktionen, die mit dem Windows Phone 7 mglich sind, implementiert hat, sondern lediglich gegen ein Interface entwickelt ist, das vom Windows Phone 7 bereitgestellt wird. Gemeint sind hier Benutzeraktionen wie eingehenden Anrufe, das Aktivieren der Kamera oder auch eine vom Windows Phone 7 eingeblendete Meldung fr einen zu schwachen Akkustand und der daraus resultierenden Notabschaltung des Gertes. Smtliche Benutzer- und auch Systemaktionen des Windows Phone 7 sind in der Schnittstelle verallgemeinert, und auf lediglich vier Systemfunktionen reduziert: private void Application_Launching(...) Diese Methode wird nur beim Starten, aber nicht beim Reaktivieren der Applikation ausgefhrt. private void Application_Activated(...) Diese Methode wird beim Reaktivieren der Applikation, also wenn sie wieder in den Vordergrund gebracht wird, ausgefhrt. Beim Starten der Applikation wird diese Methode nicht ausgefhrt. private void Application_Deactivated(...) Diese Methode wird ausgefhrt, wenn die Applikation in den Hintergrund gebracht, und somit deaktiviert, wird. Beim Schlieen der Applikation wird diese Methode nicht ausgefhrt. private void Application_Closing(...) Diese Methode wird beim Schlieen der Applikation ausgefhrt. Beim Deaktivieren wird diese Methode nicht ausgefhrt. Das bedeutet im Ergebnis, dass diese vier Schnittstellen implementiert werden mssen, falls eine Applikation eine Abarbeitung von Daten oder Protokollen bentig, wenn sie von auen beendet oder deaktiviert wird. Die Windows Phone 7 Spirit Applikation bedient diese Schnittstellen zurzeit mit einer Standartimplementierung und kann jederzeit auch von auen deaktiviert oder beendet werden. Swimlane Windows Phone 7 Spirit Applikation Die Swimlane Windows Phone 7 Spirit Applikation in Abbildung 6.1 entspricht dem, was die eigentliche Windows Phone 7 Spirit Applikation als Implementierung enthlt. Zu sehen sind die drei Komponenten FHSSpirit-App, FHSSpirit-DataControl und die Modelle. Die Assoziationen zwischen der FHSSpirit-App und Windows Phone UI entspricht dem, was in Kapitel 6.1.1 Swimlane Benutzer bereits beschreiben ist. Die Assoziation zwischen den FHSSpirit-DataControl und dem Cloud-Service stellt im Wesentlichen die implementierte Rest-Schnittstelle dar, um Daten anfragen und senden zu knnen. Zwischen der FHSSpirit-App und dem FHSSpirit-DataControl gibt es ebenfalls eine
Ronny Schleicher
Seite 44 von 77
Assoziation, da das Frontend die Benutzerinteraktion als Auftrag an das Backend schickt und das Backend die angeforderten Daten dem Frontend zur Verfgung stellt. Sowohl das Frontend(FHSSpirit-App) als auch das Backend(FHSSpirit-DataControl) mssen die Modelle kennen, da die Modelle direkt im Backend mit Daten gefllt, anschlieend an das Frontend geschickt und dort weiterverarbeitet werden. Deswegen besitzen sowohl die FHSSpirit-App also auch das FHSSpirit-DataControl eine Assoziation zu den Modellen. Durch den Einsatz solcher applikationsweiten Datenmodelle entfllt das so genannte Object-Mapping, bei dem Datenstrukturen, die vom einer Komponente erzeugt werden, fr die Verarbeitung in der anderen Komponenten erst auf deren interne Daten- und Objektstruktur umgerechnet werden mssen. Da sich im Systementwurf der Windows Phone 7 Spirit Applikation die Modelle separate in einer eigenen Komponente benden, ist ihre Verwendung im Frontund Backend mglich, ohne dass sich durch ihre Verwendung neue Abhngigkeiten ergeben. Swimlane Cloud-Service Die unterste in Abbildung 6.1 enthaltenen Swimlane Could-Service steht in erster Linie fr der FHS-Spirit Rest-Service, dessen Interface in dieser Swimlane auch enthalten ist. Da die implementierte Schnittstelle mit Rest allerdings einem oziellen Standard entspricht, ist auch eine Kommunikation zu einem anderen Rest-Services mglich. Auerdem soll mit der separaten Swimlane noch einmal verdeutlich werden, das zum Gesamtkonzept des Spirit-Projektes auch ein Cloud-Service mit RestSchnittstelle gehrt, der allerdings ledig ber das implementierte Interface mit der Windows Phone 7 Spirit Applikation assoziiert ist.
Ronny Schleicher
Seite 45 von 77
Die partielle Klasse public partial class App : Application stellt neben dem Haupteinstiegpunkt und dem Rootframe auch die statische Zugrimethode public static MainViewModel ViewModel() bereit. Die Methode hat als Rckgabe die Klasse MainViewModel, die in der DLL FHSSpirit-DataControl lokalisiert ist und die Aufgabe hat, die dort enthaltenen Modelle, die letztendlich auch wieder auf Klassendenitionen beruhen, zu verwalten. Pages Die in der Windows Phone 7 Spirit Applikation enthaltenen Pages sind alle in der FHSSpirit-App lokalisiert. Sie bestehen immer aus einen Markup, mit der Nomenklatur Klassenname.xaml, und dem dazugehrigen Code-Behind, mit der Nomenklatur Klassenname.xaml.cs. Eine besondere Rolle nimmt hier die Klasse MainPage auf die in Kapitel 6.2.2 noch genauer eingegangen wird. Ressouren Alle fr eine Windows Phone 7 Applikation bentigten Ressourcen, wie verwendete Icons, Logos und Versionsinformationen, benden sich in der DLL FHSSpirit-App. Es werden in dieser Applikation keine Ressourcen dynamisch nachgeladen. Alle fr die Windows Phone 7 Spirit Applikation ntigen Dateien werden unter Verwendung des Ressourcen-Compilers fest in die Applikation gebunden. Diese Vorgehensweise erleichtert die Bereitstellungen, die in Kapitel 7 beschrieben ist, erheblich. SampleData Die Datei MainViewModelSampleData.xaml enthlt Testdatenstze, die zum Designzeitpunkt angezeigt werden knnen. Ich Kapitel 5.3.2 werden die Voraussetzungen dafr beschrieben. Die Datei kann nach entsprechend ihrer recht einfachen Syntax beliebig erweitert werden. Wichtig ist hier, dass die Assemblies korrekt gesetzt sind, wenn sich die verwendeten Modelle in anderen DLL benden. 1 2 3 4 5 6 Listing 6.1: Ausschnitt aus der Datei: MainViewModelSampleData.xaml <l o c a l : M a i n V i e w M o d e l ... x m l n s : x="http: // schemas. microsoft .com/winfx /2006/ xaml" x m l n s : l o c a l="clr - namespace:FHSSpiritDataModels ; assembly = FHSSpiritDataModels " ... </ l o c a l : M a i n V i e w M o d e l> Abbildung 6.1 zeigt einen Ausschnitt der Datei MainViewModelSampleData.xaml. Von besonderer Bedeutung ist hier Codezeile 4, die den Assembly-Verweis auf die Modelle im FHSSpirit-DataControl enthlt und in dieser Datei von Hand eingetragen werden muss.
Ronny Schleicher
Seite 46 von 77
1 2 3 4 5 6 7 8 9 10 11 12 13
Model-View-ViewModel
Ronny Schleicher
Seite 47 von 77
In Listing 6.2 wird in Codezeile 3 eine Referenz des Typs DataControlNews deniert, die in Codezeile 7 mit dem Property Instance auf eine konkrete Instanz der Klasse festgelegt wird. In den Codezeilen 8 und 9 werden zwei Delegaten der Klasse DataControlNews an die Methoden public void showError(...) und public void responseNews(...) der Klasse MainPage gebunden. Wichtig ist in diesem Zusammenhang, das die Parameterlisten der verwendete Methode und des Delegaten identisch sein mssen. Somit ist es mglich, das die Instanz der Klasse DataControlNews Methoden der Klasse MainPage rufen kann, ohne diese direkt zu kennen. Binden der Sichten an die Modelle Die Sichten, oder auch Views, werden im Markup deniert. Hierbei kann es sich um einfache List-Views oder Textfelder handeln, oder auch um selbst denierte UI-Elemente. Die Sichten werden im jeweiligen Markup an die Modelle gebunden. Dies geschieht mit dem Attribut DataContext, wo direkt der Name des Modelles angegeben wird. Die Zuweisung eines Properties aus dem Modell wird dann direkt mit dem Output-Property des UI-Elementes verknpft. Listing 6.3: Ausschnitt aus einem Markup mit Datenbindung der View. 1 <S t a c k P a n e l> 2 <T e x t B l o c k Text="{Binding Owner}" "{Binding Item_CurrentMessage }" /> 3 </ S t a c k P a n e l> Listing 6.3 zeigt den Ausschnitt eines Markups, in dem ein TextBlock deniert wird, der sich auf einem StackPanel bendet. In Codezeile 3 wird die View an ein Modell mit Namen Item_CurrentMessage gebunden und das Property des Modells Binding Owner fr den Inhalt der View verwendet. Dateien an die Modelle gebunden. Ereignissbehandlung Die Ereignisbehandlung durch Benutzerinteraktionen ndet in der Windows Phone 7 Spirit Applikation ausschlielich in den Code-Behind-Datei der jeweilige Page statt. In den Eventhandlern, also den Behandlungsroutinen fr die verschiedenen Ereignisse, werden die Aufrufe anschlieend an die entsprechenden Controls bergeben. Somit ist der Quellcode, der sich in den Code-Behinds bendet, relative einfach und kurz gehalten.
Ronny Schleicher
Seite 48 von 77
Hinweis: Ein detaillierte Anleitung zur Bedienung der Windows Phone 7 Spirit Applikation bendet sich im Anhang unter A.4. Begrungsbildschirm Nach dem Starten der Windows Phone 7 Spirit Applikation wird fr den Zeitraum, die das Windows Phone 7 bentigt um die Applikation zu initialisieren, ein Begrungsbildschirm angezeigt, der das Logo der Fachhochschule Schmalkalden und des Spirit-Projektes beinhaltet. Dieser Begrungsbildschirm besteht aus einem Bild das bestimmten Vorgaben in Hhe und Breite entsprechen muss. Aktuell wird ein Bild mit den Abmessungen 480 mal 800 bentigt, damit das komplette Display ausgefllt werden kann. Hauptseite Die Hauptseite der Windows Phone 7 Spirit Applikation nutzt das PanoramaDesign. Sie beinhalte eine Kurzbersicht der aktuellen News, eine Testimplementierung zu den Stundenplnen und einen Page fr die Einstellungen. Von der Hauptseite aus kann in verschiedenen Sub-Pages navigiert werden. News - Detailansicht Die News-Detailansicht implementiert das Page-Design und stellt detailliert Informationen zu einer News dar. Auerdem werden alle Kommentare angezeigt, die zu der betreenden News gehren und es kann zu der Page navigiert werden, in der Kommentare hinzugefgt werden knnen. Kommentar hinzufgen Diese Page ist ebenfalls im einfachen Page-Design implementiert. Unter Verwendung einer TextBox und der virtuellen Tastatur ist es mglich, Kommentare zu der ausgewhlten News zu schreiben. Stundenplan - Detailansicht Der Stundenplan-Detailansicht ist in der Windows Phone 7 Spirit Applikation nicht voll ausimplementiert, sondern bildet nur den Implementierungsrahmen fr zuknftige Weiterentwicklungen. Hier wird das Page-Design, verwendet auf dem sich ein ScrollViewer mit eine Grid-Layout bendet. So ist es mglich, den Inhalt der Seite in alle Richtungen zu schieben und so mehr Informationen in Page zu bringen als die normale Page mit ihren horizontalen und vertikalen Abmessungen zulsst.
Ronny Schleicher
Seite 49 von 77
Ronny Schleicher
Seite 50 von 77
In Codezeile 3 wird der Konstruktor der Klasse DataControlNews, wie fr einen Singleton blich, als private deklariert um eine Instanziierung der Klasse von auerhalb mit dem new-Operator zu verhindern.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
Ronny Schleicher
Seite 51 von 77
1 2 3 4 5 6 7 8
Listing 6.6: Methode ResponseCallback() der Klasse FHSDataControlNews. p r i v a t e void R e s p o n s e C a l l b a c k ( I A s y n c R e s u l t r e s u l t ) { try { HttpWebRequest httpWebRequest = ( HttpWebRequest ) r e s u l t . AsyncState ; WebResponse r e s p o n s e = httpWebRequest . EndGetResponse ( result ) ; System . IO . Stream s t r e a m = r e s p o n s e . G e t R e s p o n s e S t r e a m ( ) ; System . IO . S t r e a m R e a d e r s r = new System . IO . S t r e a m R e a d e r ( stream ) ; t h i s . p r o c e s s J S O N S t r i n g ( s r . ReadToEnd ( ) ) ; catch ( E x c e p t i o n ex ) { t h i s . m_del_ErrorMessage ( ex . Message ) ; }
9 10 11 12 13 14 15 16 } 17 }
In Codezeile 5 wird die Referenz auf das Objekt AsyncState, welches Bestandteil der Interface-Denition des Typs IAsyncResult ist, auf einen Benutzerdenierten Referenztyp gecasted. In diesen Fall der Typ HttpWebRequest. Anschlieend wird in Codezeile 6 mit Hilfe der Referenz httpWebRequest und der Methode EndGetResponse ein Referenz auf das WebResponse-Objekt erzeugt, welches die eigentlichen Daten im JSON-Format enthlt. In Codezeile 7 und 8 wird nun mit Hilfe der System.IO.Stream- und System.IO.StreamReader-Klassen der ResponseStream ausgelesen. Die Methode ReadToEnd() die in Codezeile 10 auf den StreamReader angewendet wird, konvertiert den kompletten Eingabe-Stream in einen string, der wiederum als Parameter fr die Methode processJSONString() dient, in der die eigentliche Verarbeitung der JSON-Daten implementiert ist.
Ronny Schleicher
Seite 52 von 77
Listing 6.7 enthlt einen String mit JSON-Daten, der lediglich einen Teil der Elemente enthlt, die in den nachfolgenden Abschnitten als Datenbasis fr die Beschreibung der implementierten Methoden dient. Dennoch ist es von Vorteil die grobe Struktur der JSON-Daten darzustellen, um beim Lesen der Listing 6.8 und 6.9 leichter zwischen JObject und JArray unterscheiden zu knnen. Listing 6.7: JSON-Daten mit stark vereinfachtem Inhalt. 1 { 2 "news" : [ { 3 "news_id" : 5 , 4 "title" : "Haus F 2. Stock nicht 5 " c o n t e n t ":"Im Zuge dekann d e 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 von weiteren JSON-Objekten beinhaltet. Das erste JSON-Objekt des Arrays ist in Codezeile 2-13 dargestellt. In diesem JSON-Objekt bendet sich in Codezeile 6 -12 ein weiteres JSON-Array mit der Bezeichnung degreeClass, welches wiederum exemplarisch zwei JSON-Objekte enthlt. Diese Unterstruktur ist besonders fr das Verstndnis von Listing 6.9 und die dazugehrige Beschreibung wichtig. Methode processJSONString() In Listing 6.8 ndet unter Verwendung der Bibliothek von Newtonsoft(Querverweis auf Anhang mit Newtonsofts DLL), wie in Kapitel 4.3.5 beschrieben, die Verarbeitung 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 und JArray sind ebenfalls Bestandteil dieser Bibliothek. Der Prx J dieser Klassen steht in diesem Kontext im brigen fr JSON und nicht fr die Programmiersprache JAVA3 .
http://www.oracle.com/de/technologies/java/index.html
Ronny Schleicher
Seite 53 von 77
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Listing 6.8: Methode processJSONString() der Klasse DataControlNews. p r i v a t e void p r o c e s s J S O N S t r i n g ( s t r i n g strJSON ) { J O b j e c t j O b j e c t = J O b j e c t . P a r s e ( strJSON ) ; var q u e r y = from r e s u l t A r r a y i n ( J A r r a y ) j O b j e c t [ "news" ] l e t r o = r e s u l t A r r a y as J O b j e c t orderby ( s t r i n g ) r o . S e l e c t T o k e n ( " creationDate " ) descending let f l a t = f l a t D e g r e e C l a s s e s ( ro ) l e t comments = addComments ( r o ) s e l e c t new ItemMessageModel { C o n t e n t = ( s t r i n g ) r o . S e l e c t T o k e n ( "content" ) , Course = f l a t , CreationDateTime = ( string ) ro . SelectToken (" creationDate " ) , E x p i r e D a t e = ( s t r i n g ) r o . S e l e c t T o k e n ( " expireDate " ) , ID = ( i n t ) r o . S e l e c t T o k e n ( "news_id" ) , Owner = ( s t r i n g ) r o [ "owner" ] . S e l e c t T o k e n ( " displayedName " ) , T i t l e = ( s t r i n g ) r o . S e l e c t T o k e n ( "title" ) , CountComments = ( i n t ) ( r o [ " newsComment " ] as J A r r a y ) . Count ( ) , NewsComments = comments };
In Codezeile 3 wird der ber die Parameterliste bergebene string strJSON, der den eigentlichen JSON-String reprsentiert, der statischen Methode JObject.Parse() bergeben. Hier ndet zunchst eine syntaktische berprfung des JSON-Strings statt. Falls syntaktische Fehler im JSON-String vorhanden sind, der String also nicht valide ist, wird mit einer Ausnahme vom Typ JsonReaderException reagiert. Ein Exception-Handling ndet in der Methode processJSONString() nicht satt, da in der rufenden Methode ResponseCallback() ein allgemeingltiger ExceptionHandler mit Fehlerbehandlung implementiert ist. In Codezeile 4 beginnt das LINQ-Statement dieser Methode, das erst in Codezeile 22 mit dem ; endet. Einzelne Zeilen innerhalb eines LINQ-Statements werden nur durch Zeilenumbrche oder Kommata abgeschlossen und nie mit einem Semikolon.
Ronny Schleicher
Seite 54 von 77
Zunchst wird in Codezeile 4 die Abfragemenge, auf der das LINQ-Statement angewendet wird, festgelegt. In diesem Fall wird deniert, dass die Abfrage auf einem JArray arbeitet, welches in einem JObject mit der Bezeichnung "News" lokalisiert ist. In Codezeile 6 ndet zum ersten Mal die let-Klausel Verwendung. Mit ihr kann man dem Ergebnis eines Ausdrucks einen Namen zuweisen. In diesem Fall wird der Bezeichner ro, stellvertretend fr ResultObject, festgelegt, der ein einzelnes Ergebnis, die in der gesamten Ergebnismenge als JObject deniert. In Codezeile 7 wird die Sortierung festgelegt, in diesem Fall nach "creationDate" absteigend, damit die aktuellsten Nachrichten im Modell immer an erster Stelle angezeigt werden. In Codezeile 8 wird, wieder unter Verwendung der let-Klausel, die Methoden string flatDegreeClasses(Object ro) an den Bezeichner flat gebunden. In Codezeile 9 passiert das gleiche analog mit dem Bezeichner comments und der Methode addComments(). Die Vorgehensweise der Hilfs-Methoden wird exemplarisch in Listing 6.9 erlutert. Das eigentliche select des LINQ-Statements erzeugt in Codezeile 11 mit dem Ausdruck select new ItemMessageModel ein neues Objekt des Typs ItemMessageModel und fllt in den Codezeilen 13 - 21 die Member-Variablen des Objektes. In Codezeile 14 und 21 werden hierfr die Hilfsmethoden unter Verwendung der mit let denierten Bezeichner verwendet. Der Objekttyp ItemMessageModel, der in diesem LINQ-Statement verwendet wird, entspricht dem Objekttyp, der als Modell fr die Datenquelle auf UI-Seite dient. Somit wird das Modell der Datenquelle schon im LINQ-Statement gefllt und kann direkt durch die UI verarbeitet werden. Dies ist mglich, da die Modelle in separaten DLL deniert sind, die an jeder Stelle der Applikation, egal ob Frontend oder Backend, genutzt werden knnen. Somit ist keine Datenkonvertierung oder der Einsatz von Object-Mappern zwischen den einzelnen Anwendungsschichten ntig. Die mit new erzeugten Objekte werden in der Variable query gesammelt und in Codezeile 24 in ein Array vom Typ ItemMessageModel kopiert4 . In Codezeile 25 wird die Ergebnismenge mit einem Delegaten einer Methode bergeben, die fr die Verarbeitung verantwortlich ist und nicht in dieser Klasse bzw. DLL implementiert ist. Methode atDegreeClasses() Die Hilfs-Methode flatDegreeClasses() in Listing 6.9, die im vorherigen Abschnitt schon erwhnt wurde, ist eine statische Methode der Klasse DataControlNews, die als Parameter ein JObject erwartet und, hnlich wie die Methode processJSONString, LINQ darauf anwendet, um eine Teilmenge des vorherigen Anfrageergebnisses zu Verarbeiten.
Genau genommen werden hier nur die Referenzen der Objekte kopiert.
Ronny Schleicher
Seite 55 von 77
1 2 3
4 5 6 7 8 9 10 11 12 13 14 15 16 17 }
Listing 6.9: Hilfs-Methode atDegreeClasses() der Klasse DataControlNews. static private string f l a t D e g r e e C l a s s e s ( JObject jObject ) { var q u e r y = from r e s u l t A r r a y i n ( J A r r a y ) j O b j e c t [ " degreeClass " ] 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 J O b j e c t s e l e c t new D e g r e e C l a s s { D e g C l a s s = ( s t r i n g ) r e s u l t O b j e c t . S e l e c t T o k e n ( "title" ) }; D e g r e e C l a s s [ ] d e g r e e C l a s s e s = q u e r y . ToArray ( ) ; s t r i n g o u t p u t S t r i n g = "" ; foreach ( D e g r e e C l a s s d i n d e g r e e C l a s s e s ) { o u t p u t S t r i n g += d . D e g C l a s s + " " ; } return o u t p u t S t r i n g ;
In Listing 6.9 wird aus allen in einem JObject enthaltenen "DegreeClass"-Objekten, die sich in einem JArray benden, ein string erstellt, der den Rckgabewert der Methode bildet. Dieser string enthlt kommasepariert alle Titel der degreeClassObjekte. Die Zugrimechanismen und die Verwendung von LINQ in Codezeile 3 - 8 entsprechen dem, was in Listing 6.8 bereits beschrieben wurde. In Codezeile 10 wird die Ergebnismenge in ein Array vom Typ DegreeClass kopiert. Anschlieend wird mit einer foreach-Schleife in Codezeile 12 - 15 auf alle Member DegClass.DegClass zugegrien, die sich im Array DegreeClass[] degreeClasses benden und so der outputString gefllt. LINQ mit let-Klausel und Methoden Ein sehr interessanter Aspekt bei den hier gezeigten LINQ-Statements in Kombination mit der Verwendung der let-Klausel ist die Tatsache, dass in einem LINQStatement Methoden gerufen werden knnen. Die Methoden knnen wiederum auf Teilmengen der Abfrage angewendet werden und ebenfalls wieder LINQ oder die verwendete Programmiersprache zur Verarbeitung der Daten nutzen. Auerdem ergibt sich fr den Entwickler in den Methoden die Mglichkeit, Teilmengen der Abfrage zu debuggen, was bei LINQ-Statements in dieser Form nicht mglich ist. Das ist gerade bei aufwendigen LINQ-Statements eine sehr eektiver Weg zur Fehleranalyse. Zudem ist es ber den Einsatz von Methoden in LINQ-Statement mglich, diese dynamisch, also zu Laufzeit des Programms, zu verndern. Ebenso knnen Erweiterungen, die LINQ zurzeit noch nicht bietet, in diesen Methoden realisiert werden.
Ronny Schleicher
Seite 56 von 77
6.4.1 Modelle in C#
In Listing 6.10 wird das Modell fr die News deniert. Mit der using-Anweisung in Codezeile 1 wird die Ressource System.ComponentModel belegt, die das in Codezeile 6 benutzte Interface enthlt. In Codezeile 2 wird die Ressource fr das Modell der Kommentare belegt, da dieses Modell Bestandteil des ItemNewsModel-Modell ist. Die Klasse ItemNewsModel, die hierbei immer genau eine Nachricht reprsentiert, heit ItemNewsModel und implementiert das Interface INotifyPropertyChanged. Dieses Interface ist die Schnittstelle, die fr die Verwendung von Modellen eine zentrale Rolle einnimmt. Jedes verwendete Modell muss dieses Interface implementieren, um es als Datenquelle fr UI-Element ntzen zu knnen. Wenn ein Modell das INotifyPropertyChanged-Interface implementiert, muss jeder Setter, der fr das Modell relevante Daten manipuliert, immer ein PropertyChangedEvent auslsen, damit UI-Elementen (oder andere Objekte), die diese Modell nutzen, ber die nderungen informiert werden und eine Mglichkeit zur Verarbeitung bekommen. In den Codezeilen 8 - 16 wird dafr ein Event-Handling-Mechanismus implementiert, der dafr sorgt, das durch nderungen von Daten am Modell das Event PropertyChanged korrekt ausgelst wird. Die Implementierung, die hier verwendet wird, stellt die Standartimplementierung des MSDN dar. In Codezeile 17 - 29 ist im Modell der News-Identier, also die laufende Nummerierung aller News, mit dem Property ID implementiert. Neben dem Getter in Codezeile 20 lst der Setter in Codezeile 26 mit dem Aufruf NotifyPropertyChanged(D") das Event PropertyChanged aus und erfllt damit die im vorherigen Abschnitt beschriebenen Anforderungen. Die Kommentare, die im Listing 6.11 als Modell implementiert sind, werden in Codezeile 30 -42 als Array im ItemNewsModel verwendet, da jede News 0-n Kommentare besitzen kann. Die Implementierung entspricht, bis auf den genutzten Datentypen, vom Prinzip der Vorherigen.
Ronny Schleicher
Seite 57 von 77
Listing 6.10: Modell der News in C# 1 using System . ComponentModel ; 2 using F H S S p i r i t D a t a M o d e l s F S ; 3 ... 4 namespace F H S S p i r i t D a t a M o d e l s 5 { 6 p u b l i c c l a s s ItemNewsModel : I N o t i f y P r o p e r t y C h a n g e d 7 { 8 p u b l i c event P r o p e r t y C h a n g e d E v e n t H a n d l e r P r o p e r t y C h a n g e d ; 9 p r i v a t e void N o t i f y P r o p e r t y C h a n g e d ( S t r i n g propertyName ) 10 { 11 PropertyChangedEventHandler ha ndl er = PropertyChanged ; 12 i f ( n u l l != h a n d l e r ) 13 { 14 h a n d l e r ( t h i s , new P r o p e r t y C h a n g e d E v e n t A r g s ( propertyName )); 15 } 16 } 17 p r i v a t e i n t m_nID ; 18 p u b l i c i n t ID 19 { 20 g e t { r e t u r n m_nID ; } 21 set 22 { 23 i f ( v a l u e != m_nID ) 24 { 25 m_nID = v a l u e ; 26 N o t i f y P r o p e r t y C h a n g e d ( "ID" ) ; 27 } 28 } 29 } 30 p r i v a t e ItemNewsCommentModel [ ] m_arrNewsComments ; 31 p u b l i c ItemNewsCommentModel [ ] NewsComments 32 { 33 g e t { r e t u r n m_arrNewsComments ; } 34 set 35 { 36 i f ( v a l u e != m_arrNewsComments ) 37 { 38 m_arrNewsComments = v a l u e ; 39 N o t i f y P r o p e r t y C h a n g e d ( " CountComments " ) ; 40 } 41 } 42 } 43 } 44 }
Ronny Schleicher
Seite 58 von 77
6.4.2 Modelle in F#
Listing 6.11 zeigt das Modell fr die Kommentare, die den News hinzugefgt werden knnen. In Codezeile 1 wird zunchst der zu dieser Klasse gehrenden Namespace festgelegt. Anschlieend wird in Codezeile 3 mit der open-Anweisung die Ressource System.ComponentModel belegt. Die Klassendeklaration beginnt in Codezeile 5. In Codezeile 6 - 7 werden zwei Funktionen deklariert die durch das Schlsselwort mutable als vernderlich gekennzeichnet sind und so als Member verwendet werden knnen. Das Event-Handling und das Verwenden des Interfaces INotifyPropertyChanged ist in Codezeile 9 - 12 implementiert. Auch hier handelt es sich um eine Standartimplementierung der MSDN. In Codezeile 14 - 18 sind die Getter und Setter des Properties ID, welches als Identier fr die einzelnen Kommentare verwendet wird, implementiert. In Codezeile 18 wird auch hier wieder mit dem Aufruf ev.Trigger(x, PropertyChangedEvent Args(ID)) das Event PropertyChanged ausgelst. Codezeile 20 - 24 implementiert analog dazu das Property CreationDateTime, das den Zeitpunkt der Erzeugung des Kommentars beinhaltet. Listing 6.11: Methode requestAllNews() der Klasse DataControlNews. 1 namespace F H S S p i r i t D a t a M o d e l s F S 2 3 open System . ComponentModel 4 5 type ItemNewsCommentModel ( ) = 6 l e t mutable m_nID : i n t = 0 7 l e t mutable m _ s t r C r e a t i o n D a t e T i m e : s t r i n g = "" 8 9 l e t ev = new Event<_ , _>() 10 i n t e r f a c e I N o t i f y P r o p e r t y C h a n g e d with 11 [< CLIEvent >] 12 member x . P r o p e r t y C h a n g e d = ev . P u b l i s h 13 14 member x . ID 15 with g e t ( ) = m_nID 16 and s e t ( i d ) = 17 m_nID < i d 18 ev . T r i g g e r ( x , P r o p e r t y C h a n g e d E v e n t A r g s ( "ID" ) ) 19 20 member x . C r e a t i o n D a t e T i m e 21 with g e t ( ) = m _ s t r C r e a t i o n D a t e T i m e 22 and s e t ( c r e a t i o n D a t e T i m e ) = 23 m _ s t r C r e a t i o n D a t e T i m e < c r e a t i o n D a t e T i m e 24 ev . T r i g g e r ( x , P r o p e r t y C h a n g e d E v e n t A r g s ( " CreationDateTime " ) )
Ronny Schleicher
Seite 59 von 77
Ronny Schleicher
Seite 60 von 77
7 Bereitstellung
Dieses Kapitel beschreibt die Mglichkeiten der Bereitstellung von Windows Phone 7 Applikation. Dabei wird unter anderem auf den Zertizierungsprozess des Marketplace eingegangen und es werden Besonderheiten bei der Entwicklung von Windows Phone 7 Applikation in Bezug auf die verwendete Hardware erlutert.
Neben diesen Grundstzen gibt es noch eine Reihe anderer Vorgaben, wie die maximale Gre der XPA-Dateien, Beschrnkungen bei verwendetet Bilder und Icons, die Verwendung von Musik und vieles andere mehr. Alle Details sind ebenfalls unter[Mic11g] zusammen mit dem eigentlichen Zertizierungsprozess beschrieben.
Ronny Schleicher
Seite 61 von 77
7. Bereitstellung
7.3 Bereitstellungsformat
Das Bereitstellungsformat fr Windows Phone 7 Applikation im Marketplace ist eine Datei im XPA-Format. Dieses Format entspricht dem Format herkmmlicher ZIP-Dateien und enthlt alle Applikationsrelevanten Dateien. Durch einfaches Umbenennen der Dateiendung von xpa in zip ist es mglich, sich den Inhalte wie bei jeder anderen zip-Datei anzeigen zu lassen.
7.4 Entwicklungsgerte
Das Windows Phone 7 lsst nur die Ausfhrung von Applikationen mit einer speziellen Signatur zu, die die entsprechende XPA-Datei im Rahmen der erfolgreichen Zertizierung erhlt. Das bedeutet im Umkehrschluss, dass eigene Windows Phone 7 Applikationen, die sich gerade in der Entwicklung benden, nicht auf dem Gert ausgefhrt werden knnen. Die einzige Mglichkeit, auf einem Windows Phone 7 unsignierte Applikationen ausfhren zu knnen, ist eine Online-Registrierung des Gertes als Entwicklungsgerte. Hierfr muss das Gerte ber USB und unter Verwendung der Zune-Softeware 1 mit einem PC verbunden werden, auf dem die Windows Phone Developer Tools RTW 2 installiert sind. Anschlieend wird das Programm Windows Phone Developer Registration ausgefhrt. Um die nachfolgenden, in diesem Programm angebotenen, Registrierungsschritte erfolgreich durchlaufen zu knnen, ist ein Benutzerkonto im Developer Portal 3 und eine Windows Live ID 4 ntig. Nach erfolgreicher Registrierung des Windows Phone 7 als Entwicklungsgert ist es nun mglich, XPA-Dateien ohne gltige Signatur auszufhren, auf dem Gert zu debuggen und Entwicklertools auf dem Gert einzusetzen. Eine Registrierung als Entwicklungsgerte hat allerdings erheblichen Einuss auf die Sicherheitskonzepte, die mit den Signaturen verbunden sind. Auch die Mglichkeit, das Entwicklertools auf das Gerte angewendet werden knnen, birgt Risiken. Gerade beim Verlust eines Gertes knnen diese Faktoren erheblichen Einuss auf den Schaden haben, der entsteht. Es ist daher nicht ratsam, ein Gerte zum Entwickeln freizuschalten, das regulr verwendet wird und auf dem sich diesbezglich fr den Besitzer sensible Daten benden.
Ronny Schleicher
Seite 62 von 77
7. Bereitstellung
und Funktionen. Der Trial-Modus kann beim Bereitstellen von Windows Phone 7 Applikation als Option gewhlt werden und wir vom Windows Phone 7 und dem Marketplace voll untersttzt. Listing 7.1: Nutzung des Trail-Modus in einer Methode. 1 using M i c r o s o f t . Phone . M a r k e t p l a c e ; 2 3 p u b l i c p a r t i a l c l a s s MainPage : P h o n e A p p l i c a t i o n P a g e 4 { 5 // . . . 6 p u b l i c void s a v e D a t a ( ) 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 ( ) ; 9 10 i f ( l i . I s T r i a l () ) 11 { 12 // B e n a c h r i c h t u n g an den B e n u t z e r m i t H i n w e i s 13 // a u f d i e Nutzung e i n e r T r a i l V e r s i o n 14 return ; 15 } 16 else 17 { 18 // A u s f u e h r u n g d e s Q u e l l c o d e s d e r V o l l v e r s i o n 19 } 20 } 21 } Listing 7.1 implementiert ein Methode saveData(), die nur in der Vollversion ihre komplette Funktionalitt bereitstellen soll. Um festzustellen, ob die Windows Phone 7 Applikation im Trial-Modus ausgefhrt wird, muss lediglich der Namespace Microsoft.Phone.Marketplace eingebunden sein und wie in Codezeile eine Referenz des Typs LicenseInformation instanziiert werden. In Codezeile wird die IsTrial() Methode verwendet, um festzustellen, in welcher Variant die Applikation ausgefhrt wird, und entsprechend reagiert .
Ronny Schleicher
Seite 63 von 77
8 Ausblicke
Die Ausblicke sind aufgrund ihren unterschiedlichen Thematik in zwei Kapitel unterteil. Kapitel 8.1 enthlt Ausblicke zur Technologie des Windows Phone 7 und Aktivitten, die sich in diesem Entwicklungsbereich aktuell ergeben. Kapitel 8.2 beschftigt sich mit der Weiterentwicklung der Windows Phone 7 Spirit Applikation und den Funktionalitten des FHS-Spirit Projektes im Allgemeinen.
1 2
http://msdn.microsoft.com/en-us/hh220612 http://de.wikipedia.org/wiki/HP_webOS
Ronny Schleicher
Seite 64 von 77
8. Ausblicke
Ronny Schleicher
Seite 65 von 77
9 Fazit
Diese Arbeit hat moderne imperative und funktionale Sprachelemente des Windows Phone 7 untersucht und sie zusammen mit einem Anwendungsfall, dem SpiritProjekt, auf ihre Leistungsfhigkeit und Anwendbarkeit hin berprft. Als Ergebnis der Arbeit ist festzustellen, dass es mglich ist, mit dem Windows Phone 7 imperativ und funktional zu entwickeln. Neue Sprachen und Sprachelemente, die im Rahmen der .NET -Entwicklung entstanden sind, sind mit einigen Einschrnkungen, auch mit dem Windows Phone 7 anwendbar. Unter Verwendung prototypischer Implementierungen konnten Fragestellungen, die sich aus dem SpiritProjekt und aus der eingesetzten Technologie ergeben haben, untersucht und gelst werden. Auerdem ist festzustellen, dass der Trend hin zu gemischtsprachiger Programmierung, in Bezug auf das Windows Phone 7, kein Trend mehr ist, sondern Stand der Technik. Die einzelnen Fragestellungen von UI-Design ber die Applikationslogik bis hin zu den Netzwerkschnittstellen werden mit verschiedenen Sprachen, und teilweise auch verschiedenen Entwicklungsumgebungen gelst, die miteinander interagieren. Im Bezug aus das Spirit-Projekt ist festzustellen, dass das Windows Phone 7 aus Entwicklersicht alles bietet, entweder durch die Technologie des .NET Framework 3.5 selbst oder durch Open-Source-Projekte, was fr die Entwicklung anspruchsvoller Applikationen ntig ist. Das Entwicklungskonzept hinter dem Windows Phone 7 ist demzufolge eine sehr attraktive Plattform, die Softwareentwicklern sehr interessante Mglichkeiten bietet, Ideen sowohl mit funktionalen als auch mit imperativen Sprachelementen umzusetzen.
Ronny Schleicher
Seite 66 von 77
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/quick starts/Navigation_FramePageNav.png. MSDN - App Hub, 2011 [Mic11b] Microsoft, MSDN: http://create.msdn.com/en-US/. MSDN Development 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/we86c 8x2.aspx#multilinelambda. MSDN - Visual Basic - Mehrzeilige LambdaAusdrcke und -Unterroutinen, 2011 [Mic11g] Microsoft, MSDN: http://msdn.microsoft.com/en-us/library/hh184843 (v=VS.92).aspx. MSDN - Application Certication Requirements for Windows 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-partylinq-providers.html. OakLeaf Systems - Third-Party LINQ Providers, 2007 [Wil11] Wilcox, Je: http://www.je.wilcox.name/2011/03/metro-design-guidev1/. MSDN Blogs, 2011
Ronny Schleicher
67
A Anhang
A.1 Windows Phone 7 Spirit Applikation als Open-Source Projekt
Der komplette Quellcode der Windows Phone 7 Spirit Applikation ist in GitHub1 unter der URL https://github.com/spirit-fhs/wp7 verfgbar. Um den Quellcode zu bersetzen, ist ein Visual Studio 2010 und das aktuelle Windows Phone Developer Tools RTW 2 ntig. Das Projekt im GitHib beinhaltet alle verwendeten Assemblies und DLLs, die zu dem Projekt gehren. Eine Readme.txt-Datei im Projektverzeichnis enthlt die ntigen Informationen.
A.2 Installation
Die Applikation ist nicht im Marketplace verfgbar. Um die Windows Phone 7 Spirit Applikation auf einem Windows Phone 7 zu installieren muss, die Applikation mit dem Visual Studio 2010 bersetzt und auf ein Windows Phone 7 bertragen werden, das unsignierte Applikationen, siehe Kapitel 7.4 ausfhren kann.
http://de.wikipedia.org/wiki/GitHub http://www.microsoft.com/downloads/de-de/details.aspx?FamilyID=04704acf-a63a-4f97-952c8b51b34b00ce
Ronny Schleicher
68
A. Anhang
Es ist zwar mglich, mit Hilfe von zustzlichen Softwarepaketen anderer Anbieter diese Funktionalitt zu ergnzen, allerdings wurde aufgrund der bersichtlichkeit der Projektstruktur und der noch relative geringen Funktionalitt der prototypischen Implementierung darauf verzichtet.
A.4 Benutzerhandbuch
Nachfolgend wird eine Einfhrung in die Bedienung der Windows Phone 7 Spirit Applikation gegeben, die die implementierten Funktionen, die in dieser Arbeit entwickelt 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 zugeordneten Gruppen, dem Erstellungsdatum, dem Ersteller und der Anzahl der Kommentare zu sehen. Mit einem Klick auf das blau hinterlegte i, fr Information, wird die Detailansicht zu den Nachrichten genet. Der mittlere Screenshot zeigt die Liste aller zur Verfgung stehenden Stundenplne, die ebenfalls mit Klick aus das blau hinterlegte i in die Detailansicht wechseln. Der rechte Screenshot zeigt die Einstellungen, in denen die Verbindungsdaten festgelegt werden. In der Combo-Box stehen zur Zeit prototypisch die untersttzten Anmeldenamen zur Auswahl.
Ronny Schleicher
69
A. Anhang
Abbildung A.2: Detailansicht News in der Windows Phone 7 Spirit Applikation. Das Hinzufgen von Kommentaren ist mithilfe der integrierten Software-Tastatur mglich, wie im rechten Screenshot zu sehen. Mit den beiden Buttons am unteren Rand der Page kann der Kommentar gespeichert oder abgebrochen werden.
Ronny Schleicher
70
A. Anhang
Ronny Schleicher
71
B Anhang
B.1 Eingesetzte Software
Fr diese Arbeit wurde fr die Implementierung das Visual Studio 2010 und Expression Blend 4 verwendet. Als externe Software kommt wird die Open-SourceBibliothek Json. NET von James Newton-King 1 eingesetzt. Diese Arbeit wurde mit Latex und der Software MiKTeX 2.8 2 erstellt. Die UMLDiagramme wurden mit Enterprise Architect 9.1 3 , GIMP4 und MS-Paint gezeichnet und bearbeitet.
1 2
Ronny Schleicher
72
B. Anhang
Ronny Schleicher
73
Abbildungsverzeichnis
2.1 3.1 4.1 4.2 5.1 5.2 5.3 6.1 Komponentendiagramm mit den Schnittstellen der Systeme untereinander. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Metro-Design auf dem Startbildschirm des Windows Phone 7. . . . . Sequenzdiagramm mit dem Ablauf wendung der Klasse WebClient. . . Sequenzdiagramm mit dem Ablauf wendung der Klasse WebRequest. . der . . der . . Kommunikation unter . . . . . . . . . . . . . Kommunikation unter . . . . . . . . . . . . . 5 7
Ver. . . . 24 Ver. . . . 26
Frame- and Page Model [Mic11a] des Windows Phone 7. . . . . . . . 32 Screenshot Windows Phone 7 Emulator mit dem erzeugten Button. . 38 Screenshot des Windows Phone 7 Emulator mit Messagebox. . . . . . 38 Komponentendiagramm der Windows Phone 7 Spirit Applikation mit den Interfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
A.1 Mainpage der Windows Phone 7 Spirit Applikation. . . . . . . . . . . 69 A.2 Detailansicht News in der Windows Phone 7 Spirit Applikation. . . . 70 A.3 Detailansicht Stundenplne in der Windows Phone 7 Spirit Applikation. 71
Ronny Schleicher
74
Tabellenverzeichnis
6.1 bersicht ber die Komponenten der Windows Phone 7 Spirit Applikation mit den verwendeten Technologien. . . . . . . . . . . . . . . . 42
Ronny Schleicher
75
Listings
4.1 4.2 4.3 5.1 5.2 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8 6.9 6.10 6.11 7.1 Web-Request mit C# und der Klasse System.Net.WebClient . . . . . 23 Web-Request mit C# und der Klasse System.Net.HttpWebRequest . 25 Dispatcher.BeginInvoke unter Verwendung des Lambda Operators . . 27 Datei: Page.xaml . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Inhalt des Code-Behind in C#. . . . . . . . . . . . . . . . . . . . . . 37 Ausschnitt aus der Datei: MainViewModelSampleData.xaml . . Festlegung der Delegaten im Konstruktor der Klasse MainPage . Ausschnitt aus einem Markup mit Datenbindung der View. . . . DataControlNews als Singleton ohne serialisierten Zugri. . . . . Methode requestAllNews() der Klasse DataControlNews. . . . . Methode ResponseCallback() der Klasse FHSDataControlNews. JSON-Daten mit stark vereinfachtem Inhalt. . . . . . . . . . . . Methode processJSONString() der Klasse DataControlNews. . . Hilfs-Methode atDegreeClasses() der Klasse DataControlNews. Modell der News in C# . . . . . . . . . . . . . . . . . . . . . . Methode requestAllNews() der Klasse DataControlNews. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 47 48 50 51 52 53 54 56 58 59
Ronny Schleicher
76
Eidesstattliche Erklrung
Ich versichere an Eides Statt durch meine eigenhndige Unterschrift, dass ich die vorliegende Arbeit selbststndig und ohne fremde Hilfe angefertigt habe. Alle Stellen, die wrtlich oder dem Sinn nach auf Publikationen oder Vortrgen anderer Autoren beruhen, sind als solche kenntlich gemacht. Ich versichere auerdem, dass ich keine andere als die angegebene Literatur verwendet habe. Diese Versicherung bezieht sich auch auf alle in der Arbeit enthaltenen Zeichnungen, Skizzen, bildlichen Darstellungen und dergleichen. Die Arbeit wurde bisher keiner anderen Prfungsbehrde vorgelegt und auch noch nicht verentlicht.
Ronny Schleicher
77