Say in the OrderScreen
, we have OrderViewModel(orderRepository)
and UserViewModel(userRepository)
.
Approach #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() //<<- may have multithreading issue?
userViewModel.doSomething()
}
}
Approach #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()
}
}
Which one is better and why? Thanks.
Order Module and user Module is totally different from each other. In that case, i think Different ViewModel and Different repository would be better. If Same Module need multiple Api call in that case use one ViewModel and one Repository with Function. Function with pass differnet type for Specific Api Call.In your Scenrio, I think Approach 1 will be better.