Как реализовать LiveData Room в чистой архитектуре с помощью ViewModel + UseCase + Repository + Dao - PullRequest
0 голосов
/ 18 апреля 2020

Я хочу спросить, знаете ли вы, как лучше всего использовать сопрограммы с использованием чистой архитектуры.

Моя реализация использует уровень представления (фрагмент + 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 с хранилищем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...