J'ai une Activity
qui contient 3 RecyclerViews
. J'ai besoin de renseigner RecyclerViews
avec les données du référentiel distant (3 requêtes différentes). Puis-je utiliser plusieurs ViewModels
dans Activity
ou existe-t-il une meilleure solution (meilleure pratique).
Dans ce cas, je vous recommanderais d'utiliser un modèle de vue qui renseigne trois objets LiveData différents. De cette façon, l'interface utilisateur peut être mise à jour chaque fois qu'une de vos trois demandes reçoit une réponse. Pour plus d'informations sur l'utilisation de RecyclerView avec LiveData, reportez-vous au Exemple Google .
Je pense qu'avoir plusieurs modèles de vues par activité ne fait qu'augmenter la complexité et je ne vois pas l'intérêt de le faire.
Selon le principe d'ouverture/fermeture , vous devez créer trois ViewModel
s différents. La complexité n’augmente pas beaucoup et vous avez la possibilité de déplacer très facilement une ViewModel
(ou tout simplement de la réutiliser) avec la RecyclerView
correspondante Activity
correspondante.
Bien sûr, il est parfois logique de ne pas respecter les règles - par exemple, si vous savez qu'il n'y a aucune chance que RecyclerView
soit réutilisé ou déplacé vers un autre écran, vous pouvez alors opter pour une solution plus simple avec un ViewModel
.
La même situation si la variable ViewModel
(même avec les 3 listes) est susceptible de rester toujours très simple (seulement trois champs LiveData
, juste quelques lignes de code pour les renseigner), vous pouvez enfreindre cette règle.
Cependant, la violation de O/CP n'est pas une bonne pratique - c'est juste une violation consciente de la règle.
J'ai deux recyclages dans un fragment. Je pense que l'utilisation de deux ViewModels serait mieux. Parce que différents recyclerviews ont leur propre requête de données, et la gestion d’états, en particulier les erreurs de connexion . Dans ce cas, séparer les différents ViewModels n’augmenterait pas la complexité, mais je pense que cela correspond bien à la règle du décuplement.
Encore plus simple, vous pouvez avoir un ViewModel, qui utilise une classe de service, qui utilise à son tour les trois référentiels pour obtenir les données. Par exemple:
XActivity
-> XViewModel
-> XService
-> {Arepository, Brepository, Crepository}