Sobes.tech
Junior

Pastāsti par MVVM paraugu.

sobes.tech AI

Atbilde no AI

Modelis-Apskats-Modelis skata (MVVM) ir arhitektūras paraugs, kas atdala lietotāja saskarni (View) no biznesa loģikas (Modelis) ar starpnieka — Skata modeli (ViewModel) palīdzību.

  • Modelis: pārstāv datus un lietotnes biznesa loģiku. Nesatur UI specifisku loģiku.
  • Apskats: attēlo datus no ViewModel un nosūta lietotāja darbības (piemēram, pogas nospiešanu) uz ViewModel. Nesatur biznesa loģiku, tikai attēlošanas loģiku.
  • ViewModel: darbojas kā saikne. Nodrošina datus no Modela lietotājam ērtā formātā un apstrādā pieprasījumus no Apskata, atjauninot Modeli. Satur attēlošanas loģiku, bet tieši nemano ar View. Bieži izmanto LiveData vai StateFlow reaktīviem atjauninājumiem.

Priekšrocības:

  • Atbildības sadalījums: uzlabo koda lasāmību un uzturēšanu.
  • Testējamība: ViewModel ir viegli testēt izolētā, jo tas nav atkarīgs no Android API.
  • Dzīves cikla atbalsts: ViewModel izdzīvo konfigurācijas izmaiņas (piemēram, ekrāna apgriešanu) un izvairās no datu atkārtotas iegūšanas.
  • Uzlabota modulāritāte.

Piemēra struktūra:

// Modelis (repositorijs piemēram)
class UserRepository {
    fun getUsers(): List<User> {
        // ... datu iegūšanas loģika ...
        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()
    }
}

// Apskats (Fragment/Activity)
class UserFragment : Fragment() {
    private val viewModel: UserViewModel by viewModels() // Android KTX deleģāts

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        viewModel.users.observe(viewLifecycleOwner) { userList ->
            // UI atjaunināšana (piemēram, RecyclerView adaptera atjaunināšana)
            updateUI(userList)
        }
    }

    private fun updateUI(userList: List<User>) {
        // Teksta skatītāja, RecyclerView un citu UI elementu atjaunināšanas loģika
    }
}