Sobes.tech
Middle+

Ako je implementovaná architektúra VVM vo vašom projekte?

sobes.tech AI

Odpoveď od AI

V projekte sa používalo MVVM.

Zložky:

  • Model: Predstavuje údaje a biznis logiku. Sú to štruktúry alebo triedy, ktoré nezávisia od UI.

  • View: Zodpovedá za zobrazovanie údajov a spracovanie vstupu používateľa. Ide o UIView alebo UIViewController. View je pasívne, iba zobrazuje to, čo mu povie ViewModel.

  • ViewModel: Pôsobí ako sprostredkovateľ medzi Model a View. Obsahuje prezentačnú logiku a prevádza údaje z Model do formátu vhodného na zobrazenie vo View. ViewModel poskytuje pozorovateľné vlastnosti, na ktoré sa View prihlási. ViewModel nemá priame spojenie s View.

Interakcia:

  1. View sa prihlási na pozorovateľné vlastnosti ViewModel.
  2. ViewModel získa údaje z Model (ak je potrebné).
  3. ViewModel spracuje údaje a aktualizuje svoje pozorovateľné vlastnosti.
  4. View dostane oznámenie o zmene pozorovateľných vlastností a aktualizuje svoje rozhranie.
  5. View odosiela akcie používateľa (napríklad stlačenie tlačidla) do ViewModel cez closure alebo delegáta.
  6. ViewModel spracuje akcie, môže komunikovať s Modelom a podľa potreby aktualizovať svoje pozorovateľné vlastnosti.

Väzba (Binding):

Používal sa ReactiveSwift (alebo Combine, v závislosti od verzie iOS) na implementáciu reaktívnej väzby medzi View a ViewModel. To zabezpečuje automatickú aktualizáciu UI pri zmene údajov vo ViewModel.

// Príklad vo ViewModel
let title: Property<String>
private let mutableTitle: MutableProperty<String>

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

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

// Odoslanie akcie používateľa
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Výhody:

  • Lepšia testovateľnosť ViewModel.
  • Rozdelenie zodpovednosti medzi vrstvy.
  • Zlepšená udržiavateľnosť kódu.
  • Jednoduchšia výmena UI bez zmeny biznis logiky.