Sobes.tech
Middle+

Hogyan valósult meg a VVM architektúra a projektjében?

sobes.tech MI

Válasz az MI-től

A projektben MVVM-et használtak.

Összetevők:

  • Model: Az adatok és az üzleti logika reprezentációja. Ezek struktúrák vagy osztályok, amelyek nem függenek a UI-tól.

  • View: A felhasználói adatok megjelenéséért és bevitelének kezeléséért felelős. Ez UIView vagy UIViewController. A View passzív, csak azt mutatja, amit a ViewModel mond neki.

  • ViewModel: Közvetítőként működik a Model és a View között. Tartalmazza a prezentációs logikát, és az adatokat a Model-ből olyan formátumba alakítja, amely alkalmas a View megjelenítésére. A ViewModel megfigyelhető tulajdonságokat biztosít, amelyekhez a View feliratkozik. A ViewModel nem rendelkezik közvetlen hivatkozással a View-ra.

Interakció:

  1. A View feliratkozik a ViewModel megfigyelhető tulajdonságaira.
  2. A ViewModel szükség szerint adatokat szerez be a Model-ből.
  3. A ViewModel feldolgozza az adatokat, és frissíti megfigyelhető tulajdonságait.
  4. A View értesítést kap a változásokról, és frissíti a felületet.
  5. A View a felhasználói műveleteket (pl. gombnyomás) closure vagy delegált segítségével továbbítja a ViewModel-nek.
  6. A ViewModel feldolgozza ezeket a műveleteket, kommunikálhat a Model-lel, és szükség szerint frissíti megfigyelhető tulajdonságait.

Binding (Kötés):

A View és a ViewModel között reaktív kötést a ReactiveSwift (vagy a Combine, az iOS verziójától függően) segítségével valósították meg. Ez automatikusan frissíti a UI-t, amikor a ViewModel adatai változnak.

// Példa a ViewModel-ben
let title: Property<String>
private let mutableTitle: MutableProperty<String>

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

func loadData() {
    // ...
    mutableTitle.value = loadedData.title
    // ...
}
// Példa a View/ViewController-ben
viewModel.title.signal.observeValues { [weak self] title in
    self?.titleLabel.text = title
}

// Felhasználói művelet küldése
button.reactive.controlEvents(.touchUpInside).observeValues { [weak self] _ in
    self?.viewModel.buttonTapped()
}

Előnyök:

  • Jobb tesztelhetőség a ViewModel esetében.
  • A felelősségek szétválasztása a rétegek között.
  • Könnyebb karbantartás.
  • Egyszerűbb UI-változtatások anélkül, hogy a üzleti logikát módosítani kellene.