Oi Matheus! Tudo certo e com vc?
Na verdade meu problema é implementar alguma forma de trazer uma resposta do Repository para o ViewModel, ou seja, meu Repository vai trazer dados de uma API ou da base local para o ViewModel. Minha dúvida é: qual a melhor forma de fazer isso? Passo uma função como callback, uso uma interface ou tem outra forma melhor e mais bonita (seguindo as boas práticas)?
Pensei em passar uma função por parâmetro e usá-la como um callback, também pensei em implementar uma interface. Em Java, eu usaria uma interface e passaria a instância como parâmetro no construtor da classe. Em Kotlin usando Koin, não sei fazer isso.
Segue mais ou menos o que fiz nos meus testes:
ViewModel
class FormularioViewModel (
private val id: Long,
private val repository: MeuRepository
) : ViewModel() {
...
fun metodoDeTeste(){
...
}
...
}
Repository
class MeuRepository (
private val loteDao: LoteDao,
private val caracteristicaDao: CaracteristicaDao,
private val multivalorDao: MultivalorDao,
private val atualizaModel: (objDTO: Any)-> Unit
){
...
...
}
AppModules
val appModules = module {
single <AppDatabase> {
Room
.databaseBuilder(get(), AppDatabase::class.java, BuildConfig.DATABASE_NAME)
.allowMainThreadQueries()
.build()
}
single <LoteDao> {
get <AppDatabase>().loteDao()
}
single <CaracteristicaDao> {
get <AppDatabase>().caracteristicaDao()
}
single <MultivalorDao> {
get <AppDatabase>().multivalorDao()
}
single <MeuRepository> { (atualizaModel: (data: Any) -> Unit) ->
MeuRepository(get(), get(), get(), atualizaModel)
}
viewModel <FormularioActivityViewModel> { (id: Long) ->
FormularioActivityViewModel(id, get())
}
}
Abraço