mvvm

📁 g1joshi/agent-skills 📅 3 days ago
1
总安装量
1
周安装量
#51780
全站排名
安装命令
npx skills add https://github.com/g1joshi/agent-skills --skill mvvm

Agent 安装分布

mcpjam 1
claude-code 1
replit 1
junie 1
zencoder 1

Skill 文档

MVVM (Model-View-ViewModel)

Architectural pattern with two-way data binding.

When to Use

  • Mobile applications (SwiftUI, Compose)
  • Desktop apps (WPF, macOS)
  • Reactive UI frameworks
  • Testable UI logic

Quick Start

// SwiftUI MVVM
@Observable class UserViewModel {
    var user: User?
    var isLoading = false

    func loadUser(id: String) async {
        isLoading = true
        user = try? await userService.fetch(id)
        isLoading = false
    }
}

struct UserView: View {
    @State var viewModel = UserViewModel()

    var body: some View {
        if viewModel.isLoading {
            ProgressView()
        } else if let user = viewModel.user {
            Text(user.name)
        }
    }
}

Core Concepts

ViewModel

// Android Compose
class UserViewModel(
    private val repository: UserRepository
) : ViewModel() {
    private val _user = MutableStateFlow<User?>(null)
    val user: StateFlow<User?> = _user.asStateFlow()

    fun loadUser(id: String) {
        viewModelScope.launch {
            _user.value = repository.getUser(id)
        }
    }
}

@Composable
fun UserScreen(viewModel: UserViewModel = hiltViewModel()) {
    val user by viewModel.user.collectAsState()
    user?.let { Text(it.name) }
}

Data Binding

// Angular style
@Component({
  template: `<input [(ngModel)]="user.name" />`,
})
class UserComponent {
  user = { name: "" };
}

Best Practices

Do: Keep View passive, ViewModel testable without UI Don’t: Reference View from ViewModel

References