Sobes.tech
Junior

MVVM ба кадом намуна тааллуқ дорад?

sobes.tech AI

Ҷавоб аз AI

Model-View-ViewModel.

Масъулиятҳои компонентҳо:

  • Model: Маълумот ва бизнес-мантиқро намояндагӣ мекунад. Дар бораи View ё ViewModel намедонад.
  • View: Маълумотҳоро намоиш медиҳад ва амалҳои корбарро ба ViewModel мефиристад. Мантиқи бизнесро дар бар намегирад.
  • ViewModel: Модел ва View-ро пайваст мекунад. Мантиқи пешкашро дорад, маълумотҳоро аз Model барои View табдил медиҳад ва амалҳои корбарро коркард мекунад. Ба View мустақиман пайваст нест, алоқа одатан тавассути пайвандҳо ё намунаҳои огоҳӣ (масалан, ObservableObject дар SwiftUI) сурат мегирад.

Муносибати байни компонентҳо:

  • View ба тағиротҳо дар ViewModel обуна мешавад.
  • ViewModel вақте ки маълумотҳо дар Model тағир меёбанд ё амалҳои корбарро коркард мекунад, View-ро навсозӣ мекунад.
  • ViewModel бо Model барои гирифтани ё нигоҳ доштани маълумот ҳамкорӣ мекунад.

Масалан дар 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 = "Ном: \(user.name)"
        self.userAge = "Ваҷҳ: \(user.age)"
    }
}

// View
import SwiftUI

struct UserView: View {
    @ObservedObject var viewModel: UserViewModel

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