Upload
others
View
22
Download
0
Embed Size (px)
Citation preview
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