说在
OrderScreen
中,我们有 OrderViewModel(orderRepository)
和 UserViewModel(userRepository)
。
方法#1:
class OrderViewModel(private val orderRepository: OrderRepository) : ViewModel() {
fun doSomething() = viewModelScope.launch {
orderRepository.doSomething()
}
}
class UserViewModel(private val userRepository: UserRepository): ViewModel() {
fun doSomething() = viewModelScope.launch {
userRepository.doSomething()
}
}
@Composable
fun OrderScreen(
orderViewModel: OrderViewModel = viewModel(),
userViewModel: UserViewModel = viewModel()
) {
someButton.setOnclickListener {
orderViewModel.doSomething()
userViewModel.doSomething()
}
}
方法#2:
class OrderViewModel(
private val orderRepository: OrderRepository,
private val userRepository: UserRepository
) : ViewModel() {
fun doSomething() = viewModelScope.launch {
orderRepository.doSomething()
userRepository.doSomething()
}
}
@Composable
fun OrderScreen(orderViewModel: OrderViewModel = viewModel()) {
someButton.setOnclickListener {
orderViewModel.doSomething()
}
}
哪一个更好,为什么?谢谢。
订单模块和用户模块完全不同。在这种情况下,我认为不同的 ViewModel 和不同的存储库会更好。如果同一模块需要多个 Api 调用,在这种情况下,请使用一个 ViewModel 和一个带有函数的存储库。针对特定 Api 调用传递不同类型的函数。在您的场景中,我认为方法 1 会更好。