Gemeinsame Android-Architekturen (MVC vs MVP vs MVVM)

Bevor wir zu den Architekturen übergehen, wollen wir diesen Begriff klarstellen.
Gott Klasse / Objekt: Klasse mit einer hohen Anzahl von Komponenten, und die Komponenten sind gekoppelt. Dies ist eine sehr schlechte Idee und muss um jeden Preis vermieden werden. Es ist ein architektonisches Muster.

MVC: Model View Controller

Modell:
1. Repräsentiert die Datenmodelle.
2. Verwaltet die Datenstatus
3. Hat Geschäftslogik

Aussicht:
1. Wie wir unsere Daten darstellen, z. Ansichten / Layouts in Android.
2. Rendert die Benutzeroberfläche.

Regler:
1. Behandelt Benutzerinteraktionen mit unserer Anwendung.
2. Der Kommunikationskanal zwischen dem Modell und der Ansicht.
z.B. die Fragmente / Aktivitäten in Android.

Das MVC-Flussdiagramm sieht folgendermaßen aus:

Der Benutzer interagiert mit der Benutzeroberfläche und der Controller wird über die Ansicht benachrichtigt. Basierend auf der Benutzerinteraktion ändert der Controller bestimmte Modelle. Modelle führen eine Geschäftslogik aus und geben den aktualisierten Modelldatenstatus an den Controller zurück. Der Controller kann dann die Benutzeroberfläche gemäß dem vom Modell empfangenen neuen Datenstatus aktualisieren.

Die Ansicht erhält die Benutzereingabe und fordert den Controller auf, die Benutzereingabe zu verarbeiten.
Der Controller erhält Eingaben von View, basierend darauf, ob der Benutzer die Nachricht ausgeblendet oder angezeigt hat. Der Controller ruft Model auf, um den Datenstatus zu aktualisieren (Meldung hier).
Das Modell aktualisiert das Modell basierend auf den Eingaben vom Controller. Somit enthält es diese Geschäftslogik.
Controller erhalten die aktualisierten Daten und aktualisieren die Benutzeroberfläche entsprechend.

MVP: Model View Presenter

Modell:
Entspricht dem MVC-Muster.

Aussicht:
1. Wie wir unsere Daten darstellen, z. Ansichten / Layouts sowie Aktivitäten / Fragmente in Android.
2. Implementiert eine Schnittstelle für die Aktionen des Präsentators.

Moderator:
1. Hat keinen Bezug zu den Ansichten (im Gegensatz zu MVC).
2. Operationen werden von unseren Ansichten aufgerufen.
3. Ansichten werden über die Ansichtsoberfläche aktualisiert.

Das MVP-Flussdiagramm sieht folgendermaßen aus:

Obwohl das Flussdiagramm wie MVC aussieht, besteht der Unterschied darin, wie das VIew und die Presenter / Controller miteinander interagieren.

In MVP interagieren die Ansichten und Präsentatoren über eine Schnittstelle (im Gegensatz zu MVC). Präsentatoren führen eine Aktion auf der Benutzeroberfläche aus, die in Ansichten implementiert ist, und daher wird die Ansicht aktualisiert.

Das Modell bleibt also das gleiche (wie in MVC).
Der Moderator führt hier nur die Schnittstellenaktionen aus und hat keine Kenntnis von den Ansichten, die aktualisiert werden sollen.
Die Ansichten, die diese Schnittstelle implementieren, aktualisieren also die Benutzeroberfläche.

Es ist weitaus besser als MVC, da der Präsentator KEINE ANDROID-API hat und es einfach getestet werden kann.
Die Ansichten können mit Espresso usw. getestet werden, um festzustellen, ob die Ansichten aktualisiert wurden oder nicht.

Daher sind die Ansichten ziemlich dumm. Sie erhalten Daten vom Präsentator und aktualisieren die UI-Komponenten entsprechend.

MVVM- Modellansicht ViewModel

Es minimiert ferner den Ansichtsbindungscode, d. H. Wie die Ansicht an die Modelldaten gebunden wird.

Im Android-Ökosystem wird die Datenbindungsbibliothek von Google verwendet, und die Bindungslogik von View ist in den XML-Layouts implementiert.

Modell:
Entspricht dem MVC / MVP-Muster.

Aussicht:
1. Entspricht dem MVC / MVP-Muster.

ViewModel:
1. Es enthält das Modell.
2. Verwendet beobachtbare Werte für Aktualisierungswerte.
3. Bei der Wertaktualisierung werden die relevanten Ansichten aktualisiert (verwendet die Datenbindungsbibliothek).

Das MVP-Flussdiagramm sieht folgendermaßen aus:

Die Ansicht empfängt also die Benutzerinteraktionen und benachrichtigt das Ansichtsmodell.
Das ViewModel aktualisiert nun sowohl das Modell als auch das Observable (wodurch die Wertänderung ausgelöst wird). Als Nächstes aktualisiert die ViewModel-Oberfläche die Benutzeroberfläche (XML-Layouts) direkt.

Die Ansicht, d. H. Die XML-Datei, sieht also folgendermaßen aus:

Wie hier gezeigt, kann die TextView ihren Text direkt aktualisieren, wenn sich der Nachrichtenwert ändert.

Vergleiche zwischen MVC / MVP / MVVM:

Controller (Aktivitäten in Android) sind im Gegensatz zu MVP und MVVM in hohem Maße von Android abhängig. Daher ist es einfach, in MVP / MVVM einen Komponententest durchzuführen.

In MVVM wird das XML für Datenbindungszwecke jedoch komplexer.