Sobes.tech
Middle+

Kaip įgyvendinta VVM architektūra jūsų projekte?

sobes.tech AI

Atsakymas iš AI

Projekte naudota MVVM.

Komponentai:

  • Modelis: Atstovauja duomenis ir verslo logiką. Tai struktūros arba klasės, kurios nepriklauso nuo UI.

  • View: Atsakingas už duomenų rodymą ir naudotojo įvesties apdorojimą. Tai UIView arba UIViewController. View yra pasyvus, jis tik rodo tai, ką sako ViewModel.

  • ViewModel: Veikia kaip tarpininkas tarp Model ir View. Jame yra prezentacinė logika ir jis konvertuoja duomenis iš Model į formatą, patogų View. ViewModel teikia stebimas savybes, į kurias prenumeruojasi View. ViewModel neturi tiesioginio ryšio su View.

Sąveika:

  1. View prenumeruojasi ViewModel stebimoms savybėms.
  2. ViewModel gauna duomenis iš Model (jei reikia).
  3. ViewModel apdoroja duomenis ir atnaujina savo stebimas savybes.
  4. View gauna pranešimą apie stebimų savybių pakeitimą ir atnaujina savo sąsają.
  5. View siunčia naudotojo veiksmus (pvz., mygtuko paspaudimą) ViewModel per closure arba delegatą.
  6. ViewModel apdoroja veiksmus, gali sąveikauti su Model ir, jei reikia, atnaujinti savo stebimas savybes.

Ryšys (Binding):

Naudota ReactiveSwift (arba Combine, priklausomai nuo iOS versijos) reaktiškai ryšiui tarp View ir ViewModel įgyvendinti. Tai užtikrina automatinį UI atnaujinimą keičiant duomenis ViewModel.

// Pavyzdys ViewModel
let title: Property<String>
private let mutableTitle: MutableProperty<String>

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

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

// Vartotojo veiksmo siuntimas
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Privalumai:

  • Geresnė testuojamumas ViewModel.
  • Atsakomybės pasiskirstymas tarp sluoksnių.
  • Pagerinta kodo palaikymas.
  • Lengva keisti UI be verslo logikos keitimo.