
Was finden Sie in diesem Artikel?
2016 lernte ich Java und Anfang 2017 Android. Von Anfang an wusste ich bereits, dass es ein Konzept für die Anwendungsarchitektur gibt, aber ich wusste nicht, wie ich dies in meinem Code anwenden sollte. Ich habe viele verschiedene Anleitungen gefunden, aber es wurde nicht klarer.
Dieser Artikel ist genau der, den ich zu Beginn meiner Reise lesen möchte.
Die Bedeutung der Anwendungsarchitektur
Viele Unternehmen führen technische Tests für Kandidaten durch, die ausgewählt werden. Tests können variieren, aber eines verbindet sie. Alle erfordern Verständnis und die Fähigkeit, eine gute Softwarearchitektur zu verwenden.
Eine gute Softwarearchitektur erleichtert das Verständnis, die Entwicklung, Wartung und Implementierung des Systems [Buch "Saubere Architektur", Kapitel 15].
Der Zweck dieses Artikels ist es, jemanden zu unterrichten, der noch nie Architektur verwendet hat, um Android-Anwendungen zu entwickeln, um dies zu tun. Zu diesem Zweck betrachten wir ein praktisches Beispiel einer Anwendung, bei deren Erstellung wir die am wenigsten flexible Lösung und eine optimalere Lösung unter Verwendung der Architektur implementieren.
Beispiel
Elemente in einer RecyclerView:

- Wir erhalten Daten von der API und zeigen dem Benutzer die Ergebnisse.
- Das Ergebnis ist eine Liste von Bieren mit Namen, Beschreibung, Bild und Alkoholgehalt.
- Bier sollte nach Festungsgrad bestellt werden.
So lösen Sie dieses Problem:
- Wir müssen Daten von der API erhalten.
- Sortieren Sie Gegenstände vom niedrigsten zum höchsten Grad der Festung.
- Wenn der Alkoholgehalt weniger als 5% beträgt, wird ein grüner Kreis gezeichnet, wenn er zwischen 5% und 8% liegt - der Kreis ist orange und über 8% - ein roter Kreis.
- Schließlich müssen wir eine Liste der Elemente anzeigen.
Was ist die am wenigsten flexible Lösung?
Die am wenigsten flexible Lösung besteht darin, eine Klasse zu erstellen, die die vier vorherigen Punkte erfüllt. Dies ist die Entscheidung, die jeder von uns treffen würde, wenn wir nicht wüssten, wie die Architektur von Anwendungen aussieht.
Das Ergebnis für den Benutzer ist akzeptabel: Auf dem Bildschirm wird eine geordnete Liste angezeigt. Wenn wir dieses System jedoch skalieren müssen, werden wir verstehen, dass die Struktur nicht einfach zu verstehen, weiterzuentwickeln, zu warten und zu implementieren ist.
Wie verstehe ich die Architektur von Anwendungen in Android?
Ich werde ein sehr einfaches Beispiel geben. Stellen Sie sich eine Autofabrik mit fünf Zonen vor:
- Die erste Zone erstellt das Chassis.
- Die zweite Zone verbindet die mechanischen Teile.
- Die dritte Zone sammelt eine elektronische Schaltung.
- Der vierte Bereich ist Farbe.
- Und der letzte Bereich fügt ästhetische Details hinzu.
Dies bedeutet, dass jede Zone ihre eigene Verantwortung trägt und in einer Kette von der ersten bis zur fünften Zone arbeitet, um ein Ergebnis zu erzielen.
Ein solches System hat einen klaren Vorteil. Wenn das Auto nach seiner Fertigstellung einen Fehler macht, wissen wir je nach Verhalten, welche Abteilung ihn beheben soll, ohne andere zu stören.
Wenn wir weitere ästhetische Details hinzufügen möchten, wenden wir uns direkt dem fünften Abschnitt zu. Und wenn wir die Farbe ändern wollen, wenden wir uns der vierten zu. Und wenn wir das Chassis wechseln, ändert dies nichts an der Funktionsweise des Lackierbereichs. Das heißt, wir können unsere Maschine punktuell modifizieren, ohne die gesamte Fabrik zu stören.
Wenn wir im Laufe der Zeit eine zweite Fabrik eröffnen möchten, um ein neues Automodell zu erstellen, ist es außerdem einfacher, die Arbeitsbereiche aufzuteilen.
Android-Anwendungsarchitektur
Wir werden sicherstellen, dass es keine Klasse gibt, die die ganze Arbeit alleine erledigt: Daten von der API anfordern, sortieren und anzeigen. All dies wird auf mehrere Bereiche verteilt, die als Ebenen bezeichnet werden.
Was sind diese Schichten?

In diesem Beispiel erstellen wir eine saubere Architektur, die aus drei Ebenen besteht, die wiederum in fünf Ebenen unterteilt werden:
- Präsentationsstufe.
- Die Ebene der Geschäftslogik.
- Und die Datenebene.
1. Präsentationsstufe
Die Präsentationsebene ist die Benutzerebene, eine grafische Oberfläche, die die Ereignisse des Benutzers erfasst und ihm die Ergebnisse anzeigt. Außerdem wird überprüft, ob die vom Benutzer eingegebenen Daten keine Formatierungsfehler enthalten und ob die angezeigten Daten korrekt angezeigt werden.
In unserem Beispiel sind diese Vorgänge zwischen der Benutzeroberflächenebene und der ViewModel-Ebene aufgeteilt:
- Die Benutzeroberflächenebene enthält Aktivitäten und Fragmente, die Benutzerereignisse erfassen und Daten anzeigen.
- Die ViewModel-Ebene formatiert die Daten so, dass sie von der Benutzeroberfläche auf eine bestimmte Weise angezeigt werden.
Anstatt ViewModel zu verwenden, können wir eine andere Ebene verwenden, die diese Funktion ausführt. Es ist einfach wichtig, die Verantwortlichkeiten der einzelnen Ebenen zu verstehen.
In unserem Beispiel zeigt die Benutzeroberflächenebene eine Liste von Bieren an, und die ViewModel-Ebene gibt eine Farbe an, die Sie je nach Alkoholbereich verwenden sollten.
2. Die Ebene der Geschäftslogik
Auf dieser Ebene befinden sich alle Geschäftsanforderungen, die die Anwendung erfüllen muss. Hierzu werden hier die notwendigen Operationen durchgeführt. In unserem Beispiel ist dies die Sortierung von Bieren von der niedrigsten zur höchsten Stärke.
3. Datenschicht
Auf dieser Ebene befinden sich die Daten und die Art und Weise, wie darauf zugegriffen werden kann.
Diese Vorgänge werden zwischen der Repository-Ebene und der Datenquellenebene aufgeteilt:
- Die Repository-Schicht implementiert die Datenzugriffslogik. Seine Verantwortung ist es, Daten zu erhalten. Es muss überprüft werden, wo zu einem bestimmten Zeitpunkt nach ihnen gesucht werden muss. Sie können beispielsweise zuerst die lokale Datenbank überprüfen und, wenn dort keine Daten vorhanden sind, eine Anforderung an die API senden und die Daten in der Datenbank speichern. Das heißt, es bestimmt den Weg, auf Daten zuzugreifen. In unserem Beispiel werden Bierdaten direkt von der Ebene angefordert, die mit der API interagiert.
- Die Datenquellenschicht ist direkt für den Empfang der Daten verantwortlich. In unserem Beispiel wird die API-Zugriffslogik implementiert, um Bierdaten abzurufen.
Wie interagieren Ebenen?
Schauen wir uns die theoretischen und praktischen Ansätze der Interaktion an.
Theoretisch:

Jede Schicht sollte nur mit ihren unmittelbaren Nachbarn kommunizieren. In diesem Fall, wenn wir uns das Diagramm der Softwarearchitektur ansehen:
- Die Benutzeroberfläche kann nur mit ViewModel kommunizieren.
- ViewModel kann nur mit der Ebene der Geschäftslogik kommunizieren.
- Die Geschäftslogikebene kann nur mit der Repository-Ebene kommunizieren.
- Und das Repository kann nur mit der Datenquelle kommunizieren.
In der Praxis:
Paketstruktur in der Android Studio IDE mit einer sauberen Architektur:

Wir haben eine Paketstruktur, in der Klassen erstellt werden, von denen jede ihren eigenen Verantwortungsbereich hat.
Abschließende Bemerkungen zur Anwendungsarchitektur
Wir haben gesehen, dass jede Ebene der Softwarearchitektur ihren eigenen Verantwortungsbereich hat und alle miteinander verbunden sind.
Es ist wichtig zu betonen, dass wir nie über die verwendeten Bibliotheken oder Programmiersprachen gesprochen haben, da sich die Architektur auf die korrekte Strukturierung des Codes konzentriert, damit er skalierbar ist. Bibliotheken ändern sich im Laufe der Zeit, aber die Prinzipien der Architektur bleiben bestehen.
Außerdem wird empfohlen, Informationen zur Abhängigkeitsinjektion zu lesen, um zu vermeiden, dass Instanzen von Objekten direkt in Architekturklassen erstellt werden, und um daher Unit-Tests mit Mockito und JUnit durchführen zu können.
Ich teile ein Repository, in dem Sie sehen können:
- Ein Beispiel für eine saubere Android-Architektur mit Kotlin.
- Verwenden Sie LiveData, um die Benutzeroberfläche mit dem ViewModel zu verbinden.
- Die Verwendung von Corutin.
- Kodein zur Abhängigkeitsinjektion.
- JUnit und Mockito zum Testen der Geschäftslogik.