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
UIViewvagyUIViewController. 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ó:
- A View feliratkozik a ViewModel megfigyelhető tulajdonságaira.
- A ViewModel szükség szerint adatokat szerez be a Model-ből.
- A ViewModel feldolgozza az adatokat, és frissíti megfigyelhető tulajdonságait.
- A View értesítést kap a változásokról, és frissíti a felületet.
- 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.
- 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.