在屏幕中调用多个 ViewModel 函数与单个 ViewModel 函数

问题描述 投票:0回答:1

说在

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()
    }
}

哪一个更好,为什么?谢谢。

android mvvm kotlin-coroutines android-viewmodel android-mvvm
1个回答
0
投票

订单模块和用户模块完全不同。在这种情况下,我认为不同的 ViewModel 和不同的存储库会更好。如果同一模块需要多个 Api 调用,在这种情况下,请使用一个 ViewModel 和一个带有函数的存储库。针对特定 Api 调用传递不同类型的函数。在您的场景中,我认为方法 1 会更好。

© www.soinside.com 2019 - 2024. All rights reserved.