Sobes.tech
Middle+

Kako je implementirana VVM arhitektura u vašem projektu?

sobes.tech АИ

Одговор од АИ

U projektu je korišćen MVVM.

Komponente:

  • Model: Predstavlja podatke i poslovnu logiku. To su strukture ili klase koje nisu zavisne od UI.

  • View: Odgovorna je za prikazivanje podataka i obradu korisničkog unosa. To je UIView ili UIViewController. View je pasivan, prikazuje samo ono što mu kaže ViewModel.

  • ViewModel: Deluje kao posrednik između Modela i View-a. Sadrži prezentacionu logiku i pretvara podatke iz Modela u format pogodan za prikaz u View-u. ViewModel pruža posmatrljive osobine na koje se View pretplaćuje. ViewModel nema direktnu referencu na View.

Interakcija:

  1. View se pretplaćuje na posmatrljive osobine ViewModel-a.
  2. ViewModel dobija podatke iz Modela (ako je potrebno).
  3. ViewModel obrađuje podatke i ažurira svoje posmatrljive osobine.
  4. View prima obaveštenje o promenama i ažurira svoj interfejs.
  5. View šalje akcije korisnika (npr. pritisak na dugme) ViewModel-u putem closure ili delegata.
  6. ViewModel obrađuje te akcije, može da komunicira sa Modelom i, ako je potrebno, da ažurira svoje posmatrljive osobine.

Binding (Veza):

Koristi se ReactiveSwift (ili Combine, u zavisnosti od verzije iOS-a) za implementaciju reaktivne veze između View i ViewModel. Ovo obezbeđuje automatsko osvežavanje UI-a pri promenama podataka u ViewModel-u.

// Primer u ViewModel-u
let title: Property<String>
private let mutableTitle: MutableProperty<String>

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

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

// Slanje akcije korisnika
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Prednosti:

  • Bolja testabilnost ViewModel-a.
  • Odvajanje odgovornosti između slojeva.
  • Lakše održavanje koda.
  • Lakše promene UI-a bez menjanja poslovne logike.