Συχνές αρχιτεκτονικές Android (MVC vs MVP vs MVVM)

Πριν προχωρήσουμε στις αρχιτεκτονικές, ας πάρουμε αυτό τον όρο σαφές.
Κατηγορία Θεός / Αντικείμενο: Κατηγορία που έχει μεγάλο αριθμό εξαρτημάτων και τα στοιχεία είναι συζευγμένα. Αυτή είναι μια πολύ κακή ιδέα και πρέπει να τα αποφύγετε με κάθε κόστος. Πρόκειται για ένα αρχιτεκτονικό σχέδιο.

MVC: Μοντέλο προβολής ελεγκτή

Μοντέλο:
1. Αντιπροσωπεύει τα μοντέλα δεδομένων.
2. Διαχειρίζεται τα κράτη δεδομένων
3. Έχει επιχειρηματική λογική

Θέα:
1. Ο τρόπος με τον οποίο εκπροσωπούμε τα δεδομένα μας π.χ. Προβολές / διατάξεις στο Android.
2. Αποδίδει το περιβάλλον χρήστη.

Ελεγκτής:
1. Χειρίζεται τις αλληλεπιδράσεις χρήστη με την εφαρμογή μας.
2. Το κανάλι επικοινωνίας μεταξύ του μοντέλου και της προβολής.
π.χ. τα θραύσματα / Δραστηριότητες στο Android.

Το διάγραμμα ροής MVC θα μοιάζει με:

Ο χρήστης αλληλεπιδρά με τον περιβάλλον χρήστη και ο ελεγκτής λαμβάνει ειδοποίηση μέσω της προβολής. Με βάση την αλληλεπίδραση του χρήστη, ο ελεγκτής τροποποιεί ορισμένα μοντέλα. Τα μοντέλα εκτελούν κάποια επιχειρησιακή λογική και επιστρέφουν την ενημερωμένη κατάσταση δεδομένων μοντέλου στον ελεγκτή. Ο ελεγκτής μπορεί στη συνέχεια να ενημερώσει το UI σύμφωνα με τη νέα κατάσταση δεδομένων που έλαβε από το μοντέλο.

Η προβολή παίρνει την είσοδο του χρήστη και ζητά από τον ελεγκτή να χειριστεί την είσοδο του χρήστη.
Ο ελεγκτής λαμβάνει δεδομένα από την Προβολή, με βάση το αν ο χρήστης επέλεξε να αποκρύψει / να δει το μήνυμα. Ο ελεγκτής καλεί το μοντέλο να ενημερώσει την κατάσταση δεδομένων (μήνυμα εδώ).
Το μοντέλο ενημερώνει το μοντέλο με βάση την είσοδο από τον ελεγκτή. Έτσι περιέχει αυτή την επιχειρησιακή λογική.
Οι ελεγκτές λαμβάνουν τα ενημερωμένα δεδομένα και ενημερώνουν αναλόγως το UI.

MVP: Παρουσίαση μοντέλων

Μοντέλο:
Το ίδιο με το μοτίβο MVC.

Θέα:
1. Ο τρόπος με τον οποίο εκπροσωπούμε τα δεδομένα μας π.χ. Προβολές / διατάξεις, καθώς και Δραστηριότητες / Θραύσματα στο Android.
2. Θα εφαρμόσει μια διεπαφή για τις Δράσεις του Παρουσιαστή.

Δωρητής:
1. Δεν έχει σχέση με τις απόψεις (Σε αντίθεση με τη MVC).
2. Οι λειτουργίες μας προβάλλονται από τις απόψεις μας.
3. Οι προβολές ενημερώνονται μέσω της διασύνδεσης του View.

Το διάγραμμα ροής MVP θα μοιάζει με:

Αν και το διάγραμμα ροής είναι το ίδιο με το MVC, η διαφορά είναι ο τρόπος με τον οποίο οι VIew και οι Παρουσιαστές / Ελεγκτές αλληλεπιδρούν μεταξύ τους.

Στο MVP, οι προβολές και οι παρουσιαστές αλληλεπιδρούν μέσω διεπαφής (σε αντίθεση με το MVC). Οι παρουσιαστές εκτελούν κάποια ενέργεια στη διεπαφή, η οποία υλοποιείται σε προβολές και ως εκ τούτου η προβολή ενημερώνεται.

Έτσι το μοντέλο παραμένει το ίδιο (όπως στο MVC).
Ο παρουσιαστής εδώ εκτελεί μόνο τις ενέργειες Διεπαφής και δεν έχει γνώση των προβολών που προσπαθεί να ενημερώσει.
Επομένως, οι προβολές που υλοποιούν αυτή τη διεπαφή ενημερώνονται με το περιβάλλον χρήστη.

Είναι πολύ καλύτερο από το MVC, καθώς εδώ ο παρουσιαστής δεν διαθέτει κανένα API ANDROID και μπορεί να δοκιμαστεί εύκολα.
Οι προβολές μπορούν να ελεγχθούν χρησιμοποιώντας το espresso κ.λπ. για να δείτε αν οι προβολές ενημερώνονται ή όχι.

Έτσι οι απόψεις είναι αρκετά χαζή. Παίρνουν δεδομένα από τον παρουσιαστή και ενημερώνουν αναλόγως τα στοιχεία UI.

Μοντέλο προβολής μοντέλου MVVM - ViewModel

Μειώνει περαιτέρω τον κώδικα δέσμευσης προβολής, δηλαδή τον τρόπο με τον οποίο η προβολή δεσμεύεται με τα δεδομένα μοντέλου.

Μιλώντας στο οικοσύστημα Android, χρησιμοποιεί τη βιβλιοθήκη βιβλιοδεσίας δεδομένων από την Google και η λογική δέσμευσης της προβολής εφαρμόζεται στις διατάξεις XML.

Μοντέλο:
Το ίδιο με το μοτίβο MVC / MVP.

Θέα:
1. Ίδιο με το μοτίβο MVC / MVP.

ViewModel:
1. Περιέχει το Μοντέλο.
2. Χρησιμοποιεί παρατηρήσιμες τιμές για τις τιμές ενημέρωσης.
3. Στην ενημέρωση τιμής, οι σχετικές προβολές θα λάβουν ενημερώσεις (χρησιμοποιεί Library Data Binding Library).

Το διάγραμμα ροής MVP θα μοιάζει με:

Επομένως, η προβολή λαμβάνει τις αλληλεπιδράσεις χρήστη και θα ειδοποιεί το μοντέλο προβολής.
Τώρα το ViewModel θα ενημερώσει το μοντέλο καθώς και το Observed (το οποίο θα επικαλείται την αλλαγή τιμής). Στη συνέχεια, η διεπαφή ViewModel θα ενημερώσει άμεσα το UI (layouts XML).

Επομένως, η προβολή XML file θα μοιάζει με:

Έτσι, όπως φαίνεται, το TextView εδώ μπορεί να ενημερωθεί άμεσα το κείμενό του, καθώς αλλάζει η τιμή του μηνύματος.

Συγκρίσεις μεταξύ MVC / MVP / MVVM:

Οι ελεγκτές (δραστηριότητες στο Android) έχουν μεγάλη εξάρτηση από το Android, σε αντίθεση με τα MVP και MVVM, και ως εκ τούτου είναι εύκολο να δοκιμάσετε μονάδα σε MVP / MVVM.

Ωστόσο, η XML γίνεται πιο πολύπλοκη στο MVVM για σκοπούς δέσμευσης δεδομένων.