Avec les composants Android Architecture et le modèle MVVM, j'ai une question.
Sur la base de la plupart des exemples sur le Web, il existe généralement des exemples simples.
Avoir une entité pour la salle @Entity public class User{ ... }
Avoir un DAO @Dao public interface UserDao{ ... }
Avoir un référentiel public class UserRepository{ }
ViewModel public class UsersListViewModel extends AndroidViewModel{ .... }
Maintenant, étendons ceci et à côté de user
avons user_access
et user_actions
par exemple, donc 3 tables.
Des questions:
Pour chaque table de la salle, je crée des entités. Dois-je en avoir 3 Dao
une pour chaque entité (userDao, userAccessDao, userActionsDao) ou juste une classe générale AppDao
?
Il en va de même pour le référentiel. Un référentiel pour l'application entière ou des référentiels pour chaque entité (RepositoryUser, RepositoryUserAccess, RepositoryUserActions?
Si mon application a une activité principale et plusieurs fragments, dois-je créer un ViewModel pour chaque fragment?
Vous devriez avoir des DAO contextuels, disons un UserDao qui devrait contenir les requêtes liées aux utilisateurs, si vous avez des publications dans votre application, vous devriez avoir un PostDao pour tout ce qui concerne les publications.
Même logique pour les référentiels, rappelez-vous le principe de responsabilité unique pour les classes, respectant ce principe, vous devez avoir des référentiels pour chaque type d'entités séparées (UserRepository, PostRepository ...).
En suivant tous les nouveaux concepts décrits comme Jetpack, vous devriez avoir un modèle de vue par fragment, sauf pour une raison étrange, vous avez deux fragments qui nécessitent exactement la même logique, et il est très peu probable que cela se produise puisque l'objectif d'un fragment est d'être réutilisé.
Pour observer la source de données du référentiel en vue à l'aide de viewModel et du référentiel, suivez les étapes.
Tout d'abord, dans le référentiel, vous obtiendrez les données de dao ou de l'appel réseau dans la fonction de suspension.
Utilisation de coroutines kotlin
class YourRepository( ) {
// ....
// dao or retrofit services cof
override suspend fun getUsers(url: String): Response<List<YourObject>> {
return withContext(Dispatchers.IO) {
UserDao.getUsers()
//retrofitService.getUser().execute()
}
}}
Dans le Viewmodel, vous observerez les données dans coroutinescope.
class MainViewModel() : ViewModel() {
// .... view model configuration
private var _yourResponse = MutableLiveData<List<YourObject>>()
private var yourResponse: LiveData<List<YourObject>> = _yourResponse
fun getUsers(url:String) {
viewModelScope.launch {
withContext(Dispatchers.IO)
{
val users= yourRepository.getUsers()
if (user.size!=0) {
withContext(Dispatchers.Main) {
_yourResponse.value = users
}
}
}
}
}}
Et enfin, en activité ou en fragment, observez les données vécues votre réponse