Junior
Vorbește despre modelul MVVM.
sobes.tech AI
Răspuns de la AI
Model-View-ViewModel (MVVM) este un pattern arhitectural care separă interfața utilizatorului (View) de logica de business (Model) folosind un intermediar: ViewModel.
- Model: Reprezintă datele și logica de business a aplicației. Nu conține logică specifică UI-ului.
- View: Afișează datele din ViewModel și trimite acțiunile utilizatorului (de exemplu, apăsări de butoane) către ViewModel. Nu conține logică de business, doar logică de prezentare.
- ViewModel: Funcționează ca un legătură. Oferă date din Model pentru View într-un format potrivit pentru afișare și procesează solicitările de la View, actualizând Modelul. Conține logica de prezentare, dar nu manipulează direct View-ul. Adesea folosește LiveData sau StateFlow pentru actualizări reactive.
Avantaje:
- Separarea responsabilităților: Îmbunătățește lizibilitatea și întreținerea codului.
- Testabilitate: ViewModel este ușor de testat în izolare, deoarece nu depinde de API-ul Android.
- Suport pentru durabilitate: ViewModel supraviețuiește schimbărilor de configurație (de exemplu, rotirea ecranului) și evită reobținerea datelor.
- Modularitate îmbunătățită.
Exemplu de structură:
// Model (repositoriu de exemplu)
class UserRepository {
fun getUsers(): List<User> {
// ... logica de obținere a utilizatorilor ...
return listOf(User("Alice"), User("Bob"))
}
}
// ViewModel
class UserViewModel(private val repository: UserRepository) : ViewModel() {
private val _users = MutableLiveData<List<User>>()
val users: LiveData<List<User>> = _users
init {
loadUsers()
}
private fun loadUsers() {
_users.value = repository.getUsers()
}
}
// View (Fragment/Activitate)
class UserFragment : Fragment() {
private val viewModel: UserViewModel by viewModels() // Utilizarea delegatului Android KTX
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.users.observe(viewLifecycleOwner) { userList ->
// Actualizarea UI (de exemplu, adaptor RecyclerView)
updateUI(userList)
}
}
private fun updateUI(userList: List<User>) {
// Logica de actualizare TextView, RecyclerView etc.
}
}