Sobes.tech
Junior

MVVM үлгүсү жөнүндө айтып бер.

sobes.tech AI

AIден жооп

Модель-Көрүнүш-Модель көрүнүшү (MVVM) — колдонуучунун интерфейсин (View) бизнес-логикадан (Model) бөлүүчү архитектуралык үлгү, ал ортомчу — Көрүнүшү Модели (ViewModel) аркылуу ишке ашырылат.

  • Model: колдонмонун маалыматтары жана бизнес-логикасы. Эч кандай UI-спецификалык логика камтыбайт.
  • View: ViewModelден алынган маалыматтарды көрсөтөт жана колдонуучунун аракеттерин (мисалы, баскычтарды басуу) ViewModelге жиберет. Бизнес-логика камтыбайт, тек көрсөтүү логикасы бар.
  • ViewModel: байланыш булагы болуп саналат. Modelден алынган маалыматтарды көрсөтүү үчүн ыңгайлуу форматта камсыз кылат жана Viewден келген суроолорду иштетип, Modelди жаңыртат. Көрсөтүү логикасын камтыйт, бирок View менен түздөн-түз иштебейт. Көбүнчө LiveData же StateFlow колдонулат, реактивдүү жаңыртуулар үчүн.

Артыкчылыктары:

  • Жоопкерчиликти бөлүү: коддун окуулушу жана тейлөөчүлүгү жакшырган.
  • Тестирлөө мүмкүнчүлүгү: ViewModel оңой тесттелет, анткени ал Android APIге көзкаранды эмес.
  • Туруктуулукты камсыздоо: ViewModel конфигурация өзгөрүүлөрүн (мисалы, экранды буруу) жогорку деңгээлде сактайт жана кайрадан маалымат алууну алдын алат.
  • Модулдуулук жакшырган.

Курулуштун мисалы:

// Model (репозиторий үчүн мисал)
class UserRepository {
    fun getUsers(): List<User> {
        // ... колдонуучуларды алуу логикасы ...
        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/Activity)
class UserFragment : Fragment() {
    private val viewModel: UserViewModel by viewModels() // Android KTX делегаты колдонуу

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

        viewModel.users.observe(viewLifecycleOwner) { userList ->
            // UI жаңыртуу (мисалы, RecyclerView адаптерин жаңыртуу)
            updateUI(userList)
        }
    }

    private fun updateUI(userList: List<User>) {
        // TextView, RecyclerView жана башка UI элементтерин жаңыртуу логикасы
    }
}