In diesem Artikel liegt unser Hauptaugenmerk auf der Android-Anwendungsarchitektur und darauf, die Hauptunterschiede zwischen der beliebten Architektur von Apps auf Android MVVM vs. MVP herauszufinden.
Die Komponenten der Android-Architektur machen ihr Produkt skalierbarer und einfacher zu warten. Die Entwickler verwenden in erster Linie Architekturen wie MVP und MVVM in Android, um die Anwendungen in logischere Komponenten zu unterteilen.
MVVM und MVP sind zweifelsohne die am häufigsten verwendeten Architekturen für Android-Anwendungsentwicklung, während MVC (Model View Controller) in den letzten Jahren eine gute Wahl war.
Was ist die Android-Architektur?
Android-Architektur ist die Art und Weise, wie Sie den Code Ihres Android-Projekts so strukturieren, dass Ihr Code skalierbar und einfach zu warten ist. Entwickler verbringen mehr Zeit mit der Pflege eines Projekts als mit dessen Erstellung, daher ist es sinnvoll, ein ordentliches Architekturmuster zu verfolgen.
Unterschiede zwischen MVVM und MVC
In Android bezieht sich MVC auf das Standardmuster, bei dem eine Activity als Controller und XML-Dateien als Views fungieren. MVVM behandelt sowohl Aktivität, Fragment und XML als Ansichten, die ViewModel-Klassen sind, wo Sie Ihre Geschäftslogik schreiben. Es trennt die Benutzeroberfläche einer App vollständig von ihrer Logik.
Die Abbildung zeigt die verschiedenen Komponenten von View - Model - ViewModel und was sie jeweils enthalten.
Vorteile des MVVM-Musters
-
Überprüfen Sie das komplette Setup in der Erstellungsphase, um den zusätzlichen Aufwand auf ein Minimum zu reduzieren.
-
Erlauben Sie die Verwendung der offiziellen Bibliothek von Google für eine starke Generation von Komponenten und anderen Elementen.
-
Ähnlichkeit und Einfachheit des Codes.
-
Verwendung von Bindungsadaptern, die es dem Benutzer ermöglichen, benutzerdefinierte XML-Attribute zu schreiben.
Nachteile des MVVM-Musters
-
Testschwierigkeiten, MVVM macht das Schreiben von Unit-Tests schwieriger.
-
Der Code verwirrt den Entwickler, da XML in einigen Fällen im XML zu sehen ist.
-
Der Benutzer muss eine von zwei Methoden verwenden: Datenbindung oder eine andere Ansichtsmethode, wenn er mit der Ansicht arbeitet.
MVVM-Best-Practices
Mit dem MVVM-Muster können Entwickler robuste, hochwertige Anwendungen erstellen.
Das wichtigste Prinzip, das bei MVVM befolgt werden muss, ist die Trennung von Belangen. Es ist ein weit verbreiteter Fehler, den gesamten Code in einer Activity oder einem Fragment zu schreiben. Diese UI-basierten Klassen sollten nur Logik enthalten, die Interaktionen mit der Benutzeroberfläche und dem Betriebssystem verarbeitet. Wenn Sie diese Klassen so schlank wie möglich halten, können Sie viele Probleme im Zusammenhang mit dem Lebenszyklus von Komponenten vermeiden und die Testbarkeit dieser Klassen verbessern.
Im Folgenden finden Sie die besten Praktiken für die Erstellung von Anwendungen mit MVVM:
Speichern Sie keine Daten in den App-Komponenten
Vermeiden Sie es, die Einstiegspunkte Ihrer App, wie Aktivitäten, Dienste und Rundfunkempfänger, als Datenquellen zu bezeichnen.
Stattdessen sollten sie nur mit anderen Komponenten koordiniert werden, um die Teilmenge von Daten abzurufen, die für diesen Einstiegspunkt relevant ist. Jede App-Komponente ist eher kurzlebig und hängt von der Interaktion des Nutzers mit seinem Gerät und dem allgemeinen Zustand des Systems ab.
Abhängigkeiten von Android-Klassen reduzieren
Ihre App-Komponenten sollten die einzigen Klassen sein, die auf Android Frameworks SDK APIs wie Context oder Toast zurückgreifen. Die Abstraktion von anderen Klassen in Ihrer Anwendung hilft bei der Testbarkeit und reduziert die Kopplung innerhalb Ihrer Anwendung.
Schaffen Sie klar definierte Verantwortungsgrenzen zwischen verschiedenen Modulen in Ihrer App
Verteilen Sie zum Beispiel den Code, der Daten aus dem Netzwerk lädt, nicht über mehrere Klassen oder Pakete in Ihrer Codebasis. Definieren Sie auch nicht mehrere nicht zusammenhängende Aufgaben - wie z. B. Daten-Caching und Datenbindung - in derselben Klasse. Versuchen Sie, alles über die App-Architektur herauszufinden, um damit weiterzukommen.
Enthülle so wenig wie möglich von jedem Modul.
Lassen Sie sich zum Beispiel nicht dazu verleiten, eine Verknüpfung zu erstellen, die ein internes Implementierungsdetail eines Moduls enthüllt. Kurzfristig gewinnen Sie vielleicht ein wenig Zeit, aber Sie werden dann wahrscheinlich ein Vielfaches an technischen Schulden machen, wenn sich Ihre Codebasis weiterentwickelt.
Konzentrieren Sie sich auf den einzigartigen Kern Ihrer App, damit sie sich von der Masse abhebt.
Erfinden Sie das Rad nicht neu, indem Sie immer wieder denselben Standardcode schreiben. Konzentrieren Sie sich stattdessen auf das, was Ihre App einzigartig macht und überlassen Sie den Jetpack-Bibliotheken und anderen empfohlenen Bibliotheken die sich wiederholenden Floskeln.
Überlegen Sie, wie Sie jeden Teil Ihrer App einzeln testen können.
Eine gut definierte API für den Abruf von Daten aus dem Netz erleichtert beispielsweise das Testen des Moduls, das diese Daten in einer lokalen Datenbank speichert. Wenn Sie stattdessen die Logik dieser beiden Module an einer Stelle vermischen oder Ihren Netzwerkcode über Ihre gesamte Codebasis verteilen, wird es viel schwieriger, wenn nicht gar unmöglich, effektiv zu testen.
Enthalten Sie so viele relevante und aktuelle Daten wie möglich.
Auf diese Weise können die Nutzer die Funktionen Ihrer App auch dann nutzen, wenn sich ihr Gerät im Offline-Modus befindet. Denken Sie daran, dass nicht alle Ihre Nutzer über eine ständige Hochgeschwindigkeitsverbindung verfügen, und selbst wenn sie es tun, können sie an überfüllten Orten schlechten Empfang haben.
Schlussfolgerung
MVVM ist eines der bekanntesten Architekturmuster für die Android-Entwicklung. Es hat seine Vor- und Nachteile, außerdem wird in diesem Artikel beschrieben, warum es im Vergleich zu den traditionellen MVC- und MVP-Entwurfsmustern effizienter und nützlicher ist. Am wichtigsten ist jedoch, dass es Entwicklern hilft, eine App zu erstellen, die robuster, qualitativ hochwertiger, entkoppelt, testbar und mit einem besser wartbaren Code ausgestattet ist.