Sobes.tech
Middle+

Layihənizdə VVM memarlığı necə həyata keçirilmişdir?

sobes.tech Süni İntellekt

AI-dan cavab

Layihədə MVVM istifadə olunmuşdur.

Tərkib hissələri:

  • Model: Məlumatları və biznes məntiqini təmsil edir. Bu, UI-dən asılı olmayan strukturlar və ya sinflərdir.

  • View: Məlumatların göstərilməsi və istifadəçi girişlərinin idarə olunmasından məsuldur. Bu, UIView və ya UIViewControllerdir. View passivdir, yalnız ViewModel-in ona dediyi şeyi göstərir.

  • ViewModel: Model və View arasında vasitəçi kimi fəaliyyət göstərir. O, təqdimat məntiqini ehtiva edir və Model-dən gələn məlumatları View üçün uyğun formata çevirir. ViewModel, müşahidə olunan xüsusiyyətlər təqdim edir və View onlara abunə olur. ViewModel-in View-ə birbaşa istinad yoxdur.

Əlaqə:

  1. View, ViewModel-in müşahidə olunan xüsusiyyətlərinə abunə olur.
  2. ViewModel, lazım olsa, Model-dən məlumat alır.
  3. ViewModel, məlumatları emal edir və müşahidə olunan xüsusiyyətləri yeniləyir.
  4. View, dəyişikliklər barədə bildiriş alır və interfeysini yeniləyir.
  5. View, istifadəçi fəaliyyətlərini (məsələn, düyməyə basma) closure və ya delegatlar vasitəsilə ViewModel-ə göndərir.
  6. ViewModel, bu fəaliyyətləri emal edir, Model ilə qarşılıqlı əlaqə qura bilər və lazım olsa, müşahidə olunan xüsusiyyətləri yeniləyir.

Binding (Qoşulma):

View və ViewModel arasında reaktiv qoşulmanı həyata keçirmək üçün ReactiveSwift (və ya iOS versiyasına görə, Combine) istifadə olunmuşdur. Bu, ViewModel-dəki məlumatlar dəyişdikdə UI-nin avtomatik yenilənməsini təmin edir.

// ViewModel-də nümunə
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-də nümunə
viewModel.title.signal.observeValues { [weak self] title in
    self?.titleLabel.text = title
}

// İstifadəçi fəaliyyətinin göndərilməsi
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Üstünlüklər:

  • ViewModel-in test ediləbilərliyi yaxşılaşır.
  • Layerlər arasında məsuliyyətlərin bölünməsi.
  • Kodun saxlanması asanlaşır.
  • UI-də dəyişikliklər biznes məntiqini dəyişmədən daha asan olur.