Architectures Android communes (MVC vs MVP vs MVVM)

Avant de passer aux architectures, clarifions ce terme.
Classe divin / Objet: Classe qui a un grand nombre de composants, et les composants sont couplés. C'est une très mauvaise idée et il faut les éviter à tout prix. C'est un motif architectural.

MVC: Contrôleur de vue modèle

Modèle:
1. Représente les modèles de données.
2. Gère les états de données
3. A des logiques d'affaires

Vue:
1. La façon dont nous représentons nos données, par exemple Vues / mises en page dans Android.
2. Rend l'interface utilisateur.

Manette:
1. Gère les interactions des utilisateurs avec notre application.
2. Le canal de communication entre le modèle et la vue.
par exemple. les fragments / Activités sous Android.

Le diagramme de flux MVC ressemblera à:

L'utilisateur interagit avec l'interface utilisateur et le contrôleur en est averti via la vue. En fonction de l'interaction de l'utilisateur, le contrôleur modifie certains modèles. Les modèles exécutent une logique métier et renvoient au contrôleur les données mises à jour du modèle. Le contrôleur peut ensuite mettre à jour l'interface utilisateur en fonction du nouvel état des données, telles que reçues par Model.

La vue obtient la saisie de l'utilisateur et demande au contrôleur de gérer la saisie de l'utilisateur.
Le contrôleur obtient des informations à partir de View, selon que l'utilisateur a choisi de masquer / afficher le message. Le contrôleur appelle Model pour mettre à jour l'état des données (message ici).
Le modèle met à jour le modèle en fonction de l'entrée du contrôleur. Ainsi, il contient cette logique métier.
Les contrôleurs obtiennent les données mises à jour et mettent à jour l'interface utilisateur en conséquence.

MVP: Présentateur de vue modèle

Modèle:
Identique à celle du modèle MVC.

Vue:
1. La façon dont nous représentons nos données, par exemple Vues / mises en page ainsi que Activités / Fragments dans Android.
2. Implémentera une interface pour les actions du présentateur.

Présentateur:
1. N'a aucun rapport avec les vues (contrairement à MVC).
2. Les opérations sont appelées par nos vues.
3. Les vues sont mises à jour via l’interface de View.

Le diagramme de flux MVP ressemblera à ceci:

Bien que le diagramme de flux ressemble à celui de MVC, la différence réside dans la manière dont VIew et les présentateurs / contrôleurs interagissent.

Dans MVP, les vues et les présentateurs interagissent via une interface (contrairement à MVC). Les présentateurs effectuent des actions sur l'interface, qui est implémentée dans les vues et par conséquent, la vue est mise à jour.

Donc, le modèle reste le même (comme dans MVC).
Le présentateur exécute ici uniquement les actions de l'interface et n'a aucune connaissance des vues qu'il tente de mettre à jour.
Ainsi, les vues implémentant cette interface mettent à jour l'interface utilisateur.

Il est bien meilleur que MVC car ici le présentateur n’a PAS d’API ANDROID et il peut être facilement testé.
Les vues peuvent être testées avec espresso, etc. pour voir si les vues sont mises à jour ou non.

Ainsi, les vues sont assez stupides. Ils obtiennent des données du présentateur et mettent à jour les composants de l'interface utilisateur en conséquence.

MVVM- Modèle Voir ViewModel

Il minimise en outre le code de liaison de vue, c'est-à-dire comment la vue est liée aux données de modèle.

Dans l’écosystème Android, il utilise la bibliothèque de liaisons de données de Google et la logique de liaison de View est implémentée dans les présentations XML.

Modèle:
Identique à celle du modèle MVC / MVP.

Vue:
1. Identique au motif MVC / MVP.

ViewModel:
1. Il contient le modèle.
2. Utilise des valeurs observables pour les valeurs de mise à jour.
3. Lors de la mise à jour des valeurs, les vues pertinentes recevront des mises à jour (utilise la bibliothèque de liaisons de données).

Le diagramme de flux MVP ressemblera à ceci:

Ainsi, la vue reçoit les interactions de l'utilisateur et notifie le modèle de vue.
Le ViewModel mettra à jour le modèle ainsi que l'observable (qui invoquera le changement de valeur). Ensuite, l'interface ViewModel mettra à jour l'interface utilisateur (présentations XML) directement.

Ainsi, la vue i.e. Fichier XML ressemblera à:

Ainsi, comme indiqué, TextView peut mettre à jour directement son texte lorsque la valeur du message change.

Comparaisons entre MVC / MVP / MVVM:

Les contrôleurs (activités dans Android) dépendent fortement d'Android, contrairement à MVP et MVVM, et il est donc facile d'effectuer des tests unitaires dans MVP / MVVM.

Cependant, le langage XML devient plus complexe dans MVVM à des fins de liaison de données.