Sobes.tech
Junior

K jakému vzoru patří MVVM?

sobes.tech AI

Odpověď od AI

Model-View-ViewModel.

Odpovědnosti komponent:

  • Model: Představuje data a obchodní logiku. Nezná View nebo ViewModel.
  • View: Zobrazuje data a odesílá akce uživatele do ViewModel. Neobsahuje obchodní logiku.
  • ViewModel: Spojuje Model a View. Obsahuje prezentační logiku, převádí data z Modelu pro View a zpracovává akce uživatele. Nemá přímé odkazy na View, interakce často probíhá přes vazby nebo vzory oznámení (například ObservableObject ve SwiftUI).

Vztah mezi komponentami:

  • View se přihlásí ke změnám ve ViewModel.
  • ViewModel aktualizuje View při změnách dat v Modelu nebo při zpracování akcí uživatele.
  • ViewModel komunikuje s Modelem pro získání nebo uložení dat.

Příklad implementace (SwiftUI):

// Model
struct User {
    let name: String
    let age: Int
}

// ViewModel
import SwiftUI

final class UserViewModel: ObservableObject {
    @Published var userName: String = ""
    @Published var userAge: String = ""

    private let user: User

    init(user: User) {
        self.user = user
        self.userName = "Jméno: \(user.name)"
        self.userAge = "Věk: \(user.age)"
    }
}

// View
import SwiftUI

struct UserView: View {
    @ObservedObject var viewModel: UserViewModel

    var body: some View {
        VStack {
            Text(viewModel.userName)
            Text(viewModel.userAge)
        }
    }
}