Я хочу спросить, знаете ли вы, как лучше всего использовать сопрограммы с использованием чистой архитектуры.
Моя реализация использует уровень представления (фрагмент + ViewModel), домен (Entities + UseCases) и данные layer (Repository with Room)
Например, одна часть проекта обновляет RecyclerView из таблицы Room, когда устанавливается новая запись.
У меня есть Dao со списком LiveData в данных layer:
@Dao
interface UsersDao {
@Insert
suspend fun insertUser(user: UserDB): Long
@Query("SELECT * FROM " + USERSTABLE)
fun getUsers(): LiveData<List<UserDB>>
}
Репозиторий User на уровне данных:
val users: LiveData<List<UserEntity>> = Transformations.map(
dao.getUsers()
) { it.map { mapperDBtoEntity.mapFrom(it) } }
override fun getUsers(): LiveData<List<UserEntity>> {
return users
}
Вариант использования на уровне домена:
class GetUsersUseCase (
private val usersRepository: UsersRepository
) {
fun invoke() = usersRepository.getUsers()
}
И, наконец, вызов в ViewModel (уровень представления)
var users: LiveData<List<UserEntity>> = getUsersUseCase.invoke()
Я сомневаюсь или сомневаюсь, что я не уверен, реализую ли я правильный способ подключения пользовательских данных в ViewModel к репозиторию с помощью варианта использования.
В Интернете я видел только примеры, в которых нет сценария использования, они напрямую связывают viewModel с хранилищем.