Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase...

Post on 24-May-2020

18 views 0 download

Transcript of Cross Mobile Platform Go Go Gadget Catchphrase Programming mit Go · 2018-01-21 · Catchphrase...

Catchphrase

29.09.2017, JUG Saxony Day

Cross Mobile Platform Programming mit Go

Go Go Gadget

Übersicht

Worüber wir reden werden:

Was machen wir so?

Unsere Kunden: Industrieunternehmen, die ihre Prozesse visualisieren wollen

Was machen wir so?

Unser Produkt: eine Suite um einfach solche Visualisierungen zu erzeugen

fertige App für Android, iOS, ...User definiert Verhalten und Interface

Codegenerierung

Was machen wir so?

Unser Team:

● 5 Vollzeit Entwickler + 4 Teilzeitkräfte

Unsere Architektur:

● modellgetriebener Ansatz -> Kunde beschreibt Businesslogik und User Interface● Codegeneratoren setzen Modell in konkrete App um● App besteht aus plattformabhängigen generiertem Code und statischen Code (Baselibs)● Baselibs für iOS und Android vorhanden

Welche Probleme haben wir?

Ausgangslage :

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Was erwarten wir von einer Lösung?Einmal schreiben, überall verwenden

gute Performance einfach zu verwendenschnell zu lernen

ermöglicht inkrementellesersetzen alten Codes

läuft auf allenPlattformen

ermöglicht Ersetzen desgroßer Teile des alten Codes

gut zu debuggen und zu testen

viele vorhandene Bibliotheken

Nutzung von App-Frameworks:

● Xamarin von Microsoft○ C#

● Multi-OS Engine von Intel○ Java

● Ausschlusskriterien:○ Ganze App muss in der Sprache entwickelt

sein

Erste-Lösungsansätze

Multi-OS Engine (Intel)

Erste Lösungsansätze

Generierende Lösungen:

● J2ObjC von Google○ Übersetzt○ Java zu Objective-C Code

● EMF○ Modellierung von Skripten + Eigene Generierung

● Ausschlusskriterien:○ Performance○ Implementierungsaufwand○ Mächtigkeit

J2ObjC (Google)

Erste Lösungsansätze

Native Bibliotheken:

● C / C++, Rust, Go○ Kompilierung als native Bibliothek für

jeweilige Zielplattform

○ Anbindung über JNI (Android)

● Ausschlusskriterien:○ Sprachkomplexität

■ C++

○ Benutzbarkeit

Go (Google)

Go

Historisches:

● von Rob Pike, Robert Griesemer und Ken Thompson● 2007 als 20% Projekt bei Google begonnen● 2009 angekündigt● 2012 wurde Go 1.0 veröffentlicht● ...● 2017 wurde Go 1.9 veröffentlicht● Zukunft: Go 2.0

Go

Beliebtheit:

● Tiobe Index: 17 (1.567%) mit steigender Tendenz● Stack Overflow: 5. Platz Most loved Language, 3. Platz most wanted

...

Go

Merkmale:

● C-Ähnlich● 25 Keywörter

○ Java hat 53

● Garbage-Collected● Keine Vererbung (Komposition)● Integrierte Nebenläufigkeit● Duck Typing● Erzwungener Codestil

Go

Hello World:

Go

Duck Typing

Go

Nebenläufigkeit:

Welche Probleme haben wir?

Ausgangslage :

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Model + DB +EventBus

UI Component 1 UI Component N

Connector 1

Connector N

Lösungsarchitektur - App

UIComponent 1

JNIEventBus

UIComponent N

EventHandler

[ ]byte

Lösungsarchitektur - Go

Model-instance

(generated)

Connector 1[ ]byte

CGo Runtime

DB

Connector 2

User Code

Lösungsarchitektur

Nachrichtenformat:

● Übertragung von ○ Modelländerungen

■ Mapping Objekt + Attribut zu Topic

○ Methodenaufrufen○ Laufzeitevents

● Technische Details○ Nutzung von Flatbuffer

Erfahrungen

Vorher: Jetzt:

56 kLOC46 kLOC

40 kLOC30 kLOC

08 kLOC

BL + UI

BL + UI

BL

UI

UI

Erfahrungen

Pro:

● alle Teammitglieder können Businesslogik Code bearbeiten● neue Businesslogik-Features müssen nur einmal implementiert werden● Vereinfachung des nativen Teils● klarere Trennung zwischen Businesslogik und Views● einheitliches Verhalten der Plattformen

Contra:

● schwierigeres Debugging● komplexerer Buildprozess● schwieriger plattformspezifische APIs anzubinden

Fin

Danke für Ihre Aufmerksamkeit!

Welche Probleme haben wir?

● kleine Firma -> Effizienz ist wichtig● pflegen von n Baselibs bedeutet n-fachen Aufwand

○ jede Funktionalität muss n-mal implementiert werden○ gleiches Verhalten auf allen Plattformen herstellen○ Bibliotheken auf verschiedenen Plattformen unterschiedlich implementiert (falls existent)○ höhere Chance auf Bugs da mehr Code○ eine neue Plattform hinzufügen ist sehr großer Aufwand○ Entwickler für manche Plattform zu finden kann schwierig sein○ bestimmte Bugs können nicht bearbeitet werden, wenn der entsprechende Entwickler

abwesend ist