Sieben Android-Best Practices, die Ihnen wirklich weiterhelfen

Aug 27 2018 18:02:31 Aug 27 2018 18:02:31 Sieben Android-Best Practices, die Ihnen wirklich weiterhelfen LOGO appcom interactive GmbH

Den Nutzen von Best-Practices in der Softwareentwicklung würde wohl kaum jemand in Frage stellen. Mittlerweile existiert jedoch ein unüberschaubares Angebot an Standards, Patterns, Erfolgsrezepten und Tipps. Wie soll man dabei den Überblick behalten? Wir haben sieben Best Practices herausgefiltert, von denen Sie wirklich profitieren.

 

1. Reactive Programming

Reactive Programming ist nicht nur eine Form der funktionalen Programmierung, sondern eine eigenständige Denkweise zum Lösen von Problemen. Der Grundgedanke stammt aus dem Observer-Design Pattern: Aus nahezu allem (Click-Event, Datenbankanfrage, HTTP-Response, usw.) kann ein Datenstrom (Publisher) erstellt werden. Ein Empfänger (Observer) beobachtet diesen und verarbeitet die Daten, sobald sie bei ihm ankommen.

In der Android Welt empfiehlt es sich „RxJava“ (und „RxAndroid“) zu verwenden, da dieses Framework einen sehr großen Funktionsumfang besitzt. Neben unterschiedlichen Typen für Publisher (Observable, Single, Completable, Flowable) steht eine Vielzahl an nützlichen Operationen zur Verfügung, um die Datensequenz zu filtern, zu modifizieren, zu cachen und vieles mehr. Dabei kann man einzelne Arbeitsschritte ohne großen Aufwand auf verschiedene Threads auslagern und asynchrone Programmierung endet in Ihrem nächsten Projekt auf diese Weise nicht mehr im üblichen Chaos aus Callbacks und Threads.

 

2. Dependency Injection

In der Android Programmierung gibt es Objekte, die man immer wieder benötigt. Möchte man zum Beispiel an einer beliebigen Stelle auf die Ressourcen zugreifen, muss eine Referenz auf den Kontext vorhanden sein. Als Programmierer will man sich jedoch auf die Implementierung des Features konzentrieren, anstatt wertvolle Zeit mit Abhängigkeiten zu verschwenden.

Hier kommt Dependency Injection ins Spiel. Das Konzept basiert auf der Idee, dass ein Objekt seine Abhängigkeiten nicht selbst instanziiert, sondern diese von außen zur Verfügung gestellt bekommt (injiziert). Eine globale Komponente übernimmt diese Arbeit für den Programmierer und kümmert sich um die Verwaltung und Auflösung der Abhängigkeiten. Ein mögliches Framework ist „Dagger2“, bei dem sogar die Lebensdauer (Scope) von Instanzen angegeben werden kann. Die Instanz einer Klasse soll ebenso lange existieren wie eine bestimmt Activity? Während der gesamten Laufzeit ist eine Instanz der Datenbank nötig? Wer für diese Anforderungen einmal die Vorteile von Dependency Injection kennengelernt hat, möchte nicht mehr darauf verzichten.

 

3. Annotations

Die Verwendung von Annotationen reduziert in der Regel den Code, sodass Klassen auch in größeren Projekten übersichtlich und aufgeräumt bleiben. Dabei bieten sich speziell für die Android-Entwicklung verschiedene Anwendungsszenarien: Einfache eigene Annotationen ermöglichen das Setzen von Werten und Aufrufen von Methoden. Wem das noch nicht weit genug geht, der wird beim Annotation-Processing fündig werden, das die Möglichkeit bietet, Source Code während des Kompilierens automatisch zu generieren. Was halten Sie beispielsweise von einer @Tabbar Annotation, die eine Activity automatisiert um eine Tabbar ergänzt?

Außerdem existieren unzählige Frameworks, die das Konzept von Annotationen aufgegriffen haben. Das Framework „Retrofit“ von Square zum Beispiel, nutzt Annotationen, mit deren Hilfe es die komplexe HTTP/S API in ein übersichtliches Java Interface verwandelt. Einen Haken gibt es jedoch: Runtime-Annotations können durch die Verwendung der Reflections-API Einfluss auf die Performance haben. Man sollte es also nicht übertreiben und in performance-kritischen Situationen Vor- und Nachteile gegeneinander abwägen.

 

4. Plattformübergreifendes Denken

Wo es eine Android App gibt, ist meist die zugehörige iOS App nicht weit. Heutzutage findet man kaum noch Apps, die nicht auf beiden Plattformen verfügbar sind. Für Entwickler muss dies nicht zwangsläufig auch doppelt so viel Arbeit bedeuten. Oft kann man Komponenten in nativen Code auslagern und dadurch für beide Betriebssysteme verwenden. Außerdem unterstützen Tools gezielt die Multi-Plattform-Entwicklung. „Twine“ hilft beispielsweise dabei, String Ressourcen und deren Übersetzungen zwischen den Plattformen zu synchronisieren. Wir haben ein Android-Twine Plugin erstellt, das die Benutzung für Entwickler noch einfacher gestaltet. Zusätzlich stellen wir ein Werkzeug bereit, dass die Übersetzungen auch für den Kunden aufbereitet.

In Zukunft könnte Kotlin für die plattformübergreifende Entwicklung von Interesse sein und durch Kotlin/Native als Brücke zu iOS dienen.

 

5. Gradle

Mit dem Build-Tool Gradle erhalten Android Entwickler ein mächtiges Werkzeug, von dem oft nur ein Bruchteil der Funktionalitäten tatsächlich eingesetzt wird. Flavours sind ein Konstrukt in Gradle, um unterschiedliche Ausprägungen einer App innerhalb eines Projekts umzusetzen. Dazu können Sie unter anderem Flavour-spezifische SourceSets anlegen. Ein typischer Anwendungsfall ist der Einsatz unter Verwendung verschiedener Umgebungen wie development, staging und production, um die App diesbezüglich zu konfigurieren.

 

6. Die Entwicklungsumgebung

Eine Entwicklungsumgebung hat die Aufgabe, den Programmierer bei seiner Arbeit zu unterstützen. Android Studio wird dieser Rolle durch viele nützliche Funktionen gerecht.

Kennen Sie Live-Templates? Dabei handelt es sich um vordefinierte Code-Schnipsel, die Sie durch Eingabe einer Abkürzung in den Code einfügen können. Diese Templates bestehen nicht nur aus statischem Text, sondern können Variablen enthalten, die bei der Nutzung „live“ nacheinander mit Werten belegt werden. Das Erstellen eigener Live-Templates eignet sich vor allem für häufig verwendete Konstrukte und stellt einen einheitlichen Codestyle sicher. Durch Export können Sie die Live-Templates jedem Teammitglied zur Verfügung stellen. Unsere Vorschläge dazu finden Sie hier.

Dass Android Studio es ermöglicht, Methoden wie Getter, Setter, Konstruktoren automatisch zu generieren, ist den meisten bekannt. Wie diese Generierung genau aussieht, wird durch eigene Vorlagen, geschrieben in der velocity template language, bestimmt. Die toString() Methode ist zum Beispiel bei umfangreicheren Objekten viel nützlicher, wenn ihre Ausgabe dem JSON-Format entspricht.

 

7. Produktivität durch Teamwork

Die Entwicklung einer App ist Teamwork. Ein erster Schritt hin zu einem einheitlichen und qualitativ hochwertigen Code ist das Aufstellen eines gemeinsamen Codestyles und gemeinsamer Konventionen. Wichtig ist, dass diese zu Ihrem persönlichen Programmierstil passen. Inspiration finden Sie in unserem Android Style Guide.

Unterstützen und kontrollieren Sie sich im Team gegenseitig durch Code-Reviews, beispielsweise in Form von Pull-Requests. Dies hilft dabei, Fehler zu finden und die Qualität des Programmcodes langfristig zu steigern, ist jedoch auch mit einem zeitlichen Aufwand verbunden.

 

Best Practices, die Mehraufwand erzeugen, sind Unsinn

Vorgehensweisen, Tipps und Ratschläge zur Android Entwicklung gibt es viele, letztendlich stellt sich immer die Frage, ob sie auch zu einem Team und dessen Arbeitsweise passen. Führt ein Best-Practice in der Praxis zu mehr Aufwand und neuen Problemen, ist sie Unsinn. Die hier vorgestellten grundlegenden Konzepte unterstützen uns regelmäßig in der Entwicklung, steigern die Produktivität und dadurch auch die Motivation im Team.

Dieses Live-Video von der Droidcon gewährt noch mehr Einblicke in unsere Arbeit mit Best Practices. Wir freuen uns immer über Feedback: Wenn Ihnen diese Informationen weitergeholfen haben, liken Sie gerne das Video oder hinterlassen Sie uns einen Kommentar!

Teilen Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

Kommentar schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.





Das kann Sie ebenfalls interessieren

Unser kostenloser Newsletter für Sie

Die Welt wandelt sich immer schneller und mit Ihr die Technologien und Trends. Mit unserem Newsletter informieren wir Sie über aktuellste Trends, stellen kostenlose Whitepaper zur Verfügung und bieten innovative Workshops an.


Gewonnenes Kundenvertrauen