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