Sobes.tech
Junior

To which pattern does MVVM belong?

sobes.tech AI

Answer from AI

Model-View-ViewModel.

Responsibilities of components:

  • Model: Represents data and business logic. Does not know about View or ViewModel.
  • View: Displays data and sends user actions to ViewModel. Does not contain business logic.
  • ViewModel: Connects Model and View. Contains presentation logic, transforms data from Model for View, and handles user actions. Does not have direct references to View, interaction often occurs through bindings or notification patterns (e.g., ObservableObject in SwiftUI).

Connection between components:

  • View subscribes to changes in ViewModel.
  • ViewModel updates View upon data changes from Model or when processing user actions.
  • ViewModel interacts with Model to retrieve or save data.

Example implementation (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 = "Name: \(user.name)"
        self.userAge = "Age: \(user.age)"
    }
}

// View
import SwiftUI

struct UserView: View {
    @ObservedObject var viewModel: UserViewModel

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