Architektur & EntwicklungMobiler Anwendungen
1
Agenda Mobile Plattformen
Programmiersprachen und Frameworks
Cloud-Anbieter
Architektur mobiler Anwendungen – Vorbetrachtungen
Android-App „Time Manager“
Android-App „Time Manager“ – Architektur
User Interface Patterns
Application Lifecycle
Integration mit anderen Apps
Lokale Persistenz
Anbindung an REST Schnittstelle
Asynchrone Kommunikation
Server-Push
Einbindung von fremden Diensten
Unit-Testing
Architektur JEE Backend
2
Architektur mobiler Anwendungen für die Cloud(«AMC»)
3
Virtual Developer Plattform
4
Mobile Plattformen
5
6
Source: Market study by International Data Corporation (IDC)
7
8
ProgrammiersprachenundFrameworks
9
10
Native Hybrid Web
Objective-C: iOS
Java: Android
C/C++: Android, WP8, Bada, BB10, iOS
C#: WP8
11
Native
Codename One: Java
Adobe Air Mobile: ActionScript
Mono/Monocross: C#
Corona: Lua
Qt: C++, QML
…
12
Native, Cross-Platform/Cross-Compile
HTML5, JavaScript, CSS3
Appcelerator
PhoneGap
IBM Worklight
RhoMobile
MobiOne
…
13
Hybrid
HTML5, JavaScript, CSS3
jQuery Mobile
jQTouch
Sencha Touch
Wink
Vaadin TouchKit
Qooxdoo
…
14
Web
Vergleich von Frameworks für die Entwicklung mobiler Anwendungen
15
http://www.markus-falk.com/mobile-frameworks-comparison-chart/
Cloud-Anbieter
16
17
Infrastructure as a Service
Plattform as a Service
Software as a Service
MiddlewareApp-Server
…
Anwendungen
ServerHardware
Benutzer
Internet
Anbieter SaaS
CRM
Salesforce
Oracle
Microsoft
SugarCRM
Shopsysteme
1&1
Strato
Hosteurope
Magento
...
18
Infrastructure as a Service
Plattform as a Service
Software as a Service
MiddlewareApp-Server
…
Anwendungen
ServerHardware
Anbieter IaaS
Amazon Web Services (AWS)
EC2
S3, Glacier, EBS, RDS, DynamoDB
Windows Azure
Google Cloud Platform
Computing Engine
Cloud Storage
… viele, viele andere Anbieter von virtuellen und dedicated Servern
19
Infrastructure as a Service
Plattform as a Service
Software as a Service
MiddlewareApp-Server
…
Anwendungen
ServerHardware
Anbieter PaaS
CloudBees: Java
Force.com: Apex
Google App Engine: Java, Python
Windows Azure: .NET
Red Hat OpenShift: Java
Amazon Elastic Beanstalk: PHP, Python, Ruby, .NET und Java
Cloud Foundry (BETA): Java, Scala, Node.js und Ruby
Heroku: Ruby, Node.js, Clojure, Java, Python und Scala
Jelastic: Java und PHP
…
20
Infrastructure as a Service
Plattform as a Service
Software as a Service
MiddlewareApp-Server
…
Anwendungen
ServerHardware
Cloud Foundry
Startete als Plattform, um Spring-Applications auf Amazon Web-Services zu betreiben
2011: VMware kauft Cloud Foundry
Cloud Foundry kann auf verschiedensten Cloud-Infrastrukturen betrieben werden, sogar auf dem eigenen Computer/Notebook
Ist zurzeit in Public BETA
21
CloudBees
22
Sonderfall Jelastic
23
Architektur -Vorbetrachtungen
24
Always On?
25
Mobile App Besonderheiten (im Vergleich zu Desktop)
OS kann App und einzelne Aktivitäten Pausieren Beenden Fortsetzen Neu Starten Bestimmte Aktivitäten
erscheinen dem OS wichtiger als die Anderen Aktivitäten die benutzt
werden Aktivitäten die sichtbar
sind Daten die nicht auf Gerät
persistiert sind, können jederzeit verloren gehen
Es gibt für den Benutzer keine „Beende App“ Funktion
Offline-Fähigkeit einer App ist unverzichtbar
26
Architektur-Optionen - Schichten
27
Client
Cloud/Server
Presentation
Logic
Business
Logic
Presentation
Logic
Presentation
Logic
Presentation
Engine
Business
Logic
Data Data Data Data
Business
Logic
Business
Logic
Presentation
Logic
Presentation
Logic
Business
Logic
Fat Ultra ThinThinSmart
Data Data Data
Android-App „Time Manager“
28
29
30
31
Funktionen der App
Gezeigt mit WireframeSketcher
Android-App „Time Manager“Architektur
32
Architektonische Themen in der „Time Manager“ App User Interface Patterns (MVC, MVP)
Application-Lifecycle
Integration mit anderen Apps, die auf dem mobilen Gerät laufen (über URI Schemata)
Lokale Persistenz (SQLite)
Anbindung an eigene, entfernte REST Schnittstelle (JAX-RS, JEE)
Asynchrone Kommunikation mit Server (über Hintergrundprozesse auf moilbem Gerät)
Server-Push (Google Cloud Messaging, WebSockets)
Einbindung von fremden, entfernten Diensten
In der App (Google Maps, DropBox)
Auf dem Server (DropBox)
Unit-Testing
33
USER INTERFACE PATTERNS
Architekturthemen
34
Model View Controller
35
Model View Presenter
36
Supervising Controller
Passive View
iOS
37
Traditional version of MVC as a compound pattern
Cocoa version of MVC as a compound design pattern
iOS – Beispiel Mediating Controller
38
iOS – Coordinating Controller
39
Coordinating controller as the owner of a nib file
Android – MVC mit Adaptern
40
Adapter
ModelArray
Cursor…
update
User event
readwrite
AdapterView
Android - MVC
41
WidgetsLayoutResources
ActivityFragment
EntitiesContentProvider
Android - MVP
42
Plain, self-made Classes ActivityFragmentWidgetsLayoutResources
EntitiesContentProvider
Windows 8, Windows Phone 8
43
APPLICATION LIFECYCLE
Architekturthemen
44
Android Activity/Application Lifecycle
45
Vergleich iOS/Android Lifecycles
46
Windows Phone 8 Application Lifecycle
47
INTEGRATION MIT ANDEREN APPS
Architekturthemen
48
Mobile OS
49
App ARegister scheme://
App BRegister scheme://
App CRegister scheme://
MyAppscheme://some/value
Android Standard Activity Actions
50
ACTION_MAIN
ACTION_VIEWACTION_ATTACH_DATA
ACTION_EDIT
ACTION_PICKACTION_CHOOSER
ACTION_GET_CONTENTACTION_DIAL
ACTION_CALLACTION_SEND
ACTION_SENDTO
ACTION_ANSWERACTION_INSERT
ACTION_DELETEACTION_RUN
ACTION_SYNC
ACTION_PICK_ACTIVITYACTION_SEARCH
ACTION_WEB_SEARCHACTION_FACTORY_TEST
Android Intent Filter
51
<activity android:name=".MyUriActivity"><intent-filter>
<action android:name="android.intent.action.VIEW" /><category android:name="android.intent.category.DEFAULT" /><category android:name="android.intent.category.BROWSABLE" /><data android:scheme="myapp" android:host="path" />
</intent-filter></activity>
LOKALE PERSISTENZ
Architekturthemen
52
SQLite mit Android
53
SQLite
ContentProvider
Controller(Activity, Fragment, Presenter)
SQLiteOpenHelper
Nutzung mit dem Android Loader
Framework
ANBINDUNG AN REST-SCHNITTSTELLE
Architekturthemen
54
Kommunikation und Datenformate
55
ClientServer
JSON oder XMLüber HTTP(S) Server Server
Twitter API hat XML Support eingestellt
56
JSON support onlyAPI v1.1 will support JSON only. We've been hinting at this for some time now, first dropping XML support on the Streaming API and more recently on the trends API. We've chosen to throw our support behind the JSON format shared across the platform. Consequently, we've decided to discontinue support for XML, Atom, and RSS, which are infrequently used today. For historical context, when we originally built the API all major languages did not have performant, well vetted libraries supporting JSON — today they do.
CRUD und REST
57
Aktion Idempotent HTTP-Verb
Create Ja PUT
Create Nein POST
Read GET
Update Ja PUT
Update Nein POST
Delete DELETE
ASYNCHRONE KOMMUNIKATION
Architekturthemen
58
59
HTTP = Synchrones Protokoll
60
http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html
Android – Pattern für REST-Implementierung
61
Hintergrund-Prozess
Android – Pattern für REST-Implementierung
62
Hintergrund-Prozess
Android – Pattern für REST-Implementierung
63
Hintergrund-Prozess
SERVER-PUSH
Architekturthemen
64
Apple Push Notifications
65
Windows Phone Push Notifications
66
Client
Google Cloud Messaging (GCM)
67
RegistrationHandler
RegistrationHandler
1
2
3
4
regId
regId
regId
regId <-> username5
Server
1 regId
2
Message
Message
MessageHandler
3
Message
4
WebSockets
68
WebSockets
69
EINBINDUNG VON FREMDEN DIENSTEN
Architekturthemen
70
Optionen
71
My Server
3rd Party Serverz.B. DropBox
REST-API
REST-API
My App Credentials sind auf Server hinterlegt
- ODER –OAuth2
3rd PartyApp
Lokale Integrationz.B. Google Maps API
Credentials sind auf Gerät hinterlegt
- ODER -OAuth2
UNIT-TESTING
Architekturthemen
72
Testbarkeit von (Business-)Logik der App
73
Fragment
Activity
ContentProvider
Layout
Service
AsyncTask
Widget
Adapter
AdapterView
UnitTest
Testbarkeit von (Business-)Logik der App
74
Fragment
Activity ContentProvider
Layout
Service
AsyncTask
Widget
Adapter
AdapterView
Presenter
Interface
UnitTest
ArchitekturJEE Backend
75
JEE – Servlets, JAX-RS und EJB
76
Application Server
Jersey REST-Servlet
Web-Container
EJB-Container
Resource
Resource
Resource
Stateless Session Bean
Stateless Session Bean
Stateless Session Bean
Stateless Session Bean
DB
Request Response
Entity Manager
JAX-RS
HTTP(S)
1
23 4
5
6
Architektur mobiler Anwendungen für die Cloud(«AMC»)
77
Virtual Developer Plattform
78