19.01.2015 Views

Architektur & Entwicklung Mobiler Anwendungen - Digicomp

Architektur & Entwicklung Mobiler Anwendungen - Digicomp

Architektur & Entwicklung Mobiler Anwendungen - Digicomp

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!