Sobes.tech
Middle+

Loyihangizda VVM arxitekturasi qanday amalga oshirilgan?

sobes.tech AI

AIdan javob

Loyihada MVVM ishlatilgan.

Tarkibiy qismlar:

  • Model: Ma'lumotlar va biznes mantiqini ifodalaydi. Bu UI ga bog'liq bo'lmagan tuzilmalar yoki sinflar.

  • View: Ma'lumotlarni ko'rsatish va foydalanuvchi kirishini boshqarish uchun javobgardir. Bu UIView yoki UIViewController. View passiv bo'lib, faqat ViewModel tomonidan aytilgan narsani ko'rsatadi.

  • ViewModel: Model va View o'rtasida vositachi sifatida ishlaydi. U taqdimot mantiqini o'z ichiga oladi va Model'dan kelgan ma'lumotlarni View uchun qulay formatga aylantiradi. ViewModel kuzatuvchi xususiyatlar taqdim etadi, ularga View obuna bo'ladi. ViewModel to'g'ridan-to'g'ri View ga murojaat qilmaydi.

O'zaro ta'sir:

  1. View, ViewModel ning kuzatuvchi xususiyatlariga obuna bo'ladi.
  2. ViewModel, agar kerak bo'lsa, Model'dan ma'lumot oladi.
  3. ViewModel ma'lumotlarni qayta ishlaydi va o'z kuzatuvchi xususiyatlarini yangilaydi.
  4. View, o'zgarishlar haqida xabardor bo'ladi va interfeysini yangilaydi.
  5. View, foydalanuvchi harakatlarini (masalan, tugmani bosish) closure yoki delegatlar orqali ViewModel ga yuboradi.
  6. ViewModel, bu harakatlarni qayta ishlaydi, Model bilan o'zaro ta'sir qilishi mumkin va kerak bo'lsa, o'z kuzatuvchi xususiyatlarini yangilaydi.

Binding (Bog'lanish):

View va ViewModel o'rtasida reaktiv bog'lanishni amalga oshirish uchun ReactiveSwift (yoki iOS versiyasiga qarab, Combine) ishlatilgan. Bu, ViewModel'dagi ma'lumotlar o'zgarganda UI ning avtomatik yangilanishini ta'minlaydi.

// ViewModel'da misol
let title: Property<String>
private let mutableTitle: MutableProperty<String>

init(...) {
    self.mutableTitle = MutableProperty("")
    self.title = Property(mutableTitle)
    // ...
}

func loadData() {
    // ...
    mutableTitle.value = loadedData.title
    // ...
}
// View/ViewController'da misol
viewModel.title.signal.observeValues { [weak self] title in
    self?.titleLabel.text = title
}

// Foydalanuvchi harakatini yuborish
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Afzalliklar:

  • ViewModel ning test qilish imkoniyati yaxshilanadi.
  • Qatlamlar o'rtasida mas'uliyatlar ajratiladi.
  • Kodni saqlash osonlashadi.
  • UI ni o'zgartirish biznes mantiqini o'zgartirmasdan osonroq bo'ladi.