Sobes.tech
Middle+

Kuidas on teie projektis rakendatud VVM arhitektuur?

sobes.tech AI

Vastus AI-lt

Projektis kasutati MVVM-i.

Komponendid:

  • Model: Esindab andmeid ja äriloogikat. Need on struktuurid või klassid, mis ei sõltu UI-st.

  • View: Vastutab andmete kuvamise ja kasutaja sisendi töötlemise eest. See on UIView või UIViewController. View on passiivne, see kuvab ainult seda, mida ütleb ViewModel.

  • ViewModel: Toimib vahendajana Modeli ja View vahel. See sisaldab esitlusloogikat ja teisendab Modelist saadud andmed sobivasse vormingusse View jaoks. ViewModel pakub jälgitavaid omadusi, millele View registreerub. ViewModelil ei ole otsest seost View-ga.

Koostoime:

  1. View registreerub ViewModeli jälgitavatele omadustele.
  2. ViewModel saab andmeid Modelist (vajadusel).
  3. ViewModel töötleb andmeid ja uuendab oma jälgitavaid omadusi.
  4. View saab teate muutusest ja uuendab oma kasutajaliidest.
  5. View saadab kasutaja tegevused (näiteks nupu vajutamine) ViewModelile closure või delegaadi kaudu.
  6. ViewModel töötleb tegevusi, võib suhelda Modeliga ja vajadusel uuendada oma jälgitavaid omadusi.

Sidumine (Binding):

Kasutusel oli ReactiveSwift (või Combine, sõltuvalt iOS-i versioonist) reaktiivse sidumise rakendamiseks. See tagab UI automaatse uuendamise, kui andmed ViewModelis muutuvad:

// Näide ViewModelis
let title: Property<String>
private let mutableTitle: MutableProperty<String>

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

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

// Kasutaja tegevuse saatmine
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Eelised:

  • Parema testitavusega ViewModel.
  • Vastutuse jaotamine kihtide vahel.
  • Koodi parema hooldatavuse.
  • Lihtne UI vahetamine ilma äriloogika muutmata.