如何使用 ViewModel + UseCase + Repository + Dao 在 Clean Architecture 中实现 LiveData Room

Map*_*apX 5 android clean-architecture kotlin-coroutines

我想问您是否知道以干净的架构方式使用协程的最佳实践是什么。

我的实现使用表示层(片段+ ViewModel)、域(实体+用例)和数据层(带房间的存储库)

例如,当设置新条目时,项目的一部分会从 Room 表更新 RecyclerView。

我有一个在数据层中有一个 LiveData 列表的 Dao:

@Dao
interface UsersDao {
    @Insert
    suspend fun insertUser(user: UserDB): Long

    @Query("SELECT * FROM " + USERSTABLE)
    fun getUsers(): LiveData<List<UserDB>>
}
Run Code Online (Sandbox Code Playgroud)

数据层的用户存储库:

val users: LiveData<List<UserEntity>> = Transformations.map(
    dao.getUsers()
) { it.map { mapperDBtoEntity.mapFrom(it) } }

override fun getUsers(): LiveData<List<UserEntity>> {
    return users
}
Run Code Online (Sandbox Code Playgroud)

领域层的用例:

class GetUsersUseCase (
    private val usersRepository: UsersRepository
) {
    fun invoke() = usersRepository.getUsers()
}
Run Code Online (Sandbox Code Playgroud)

最后是 ViewModel(表示层)中的调用

var users: LiveData<List<UserEntity>> = getUsersUseCase.invoke()
Run Code Online (Sandbox Code Playgroud)

我的疑问或问题是我不确定我是否正在实现通过用例将 ViewModel 中的用户实时数据与存储库连接的正确方法。

在网络中,我只看到没有用例的示例,它们将 viewModel 直接与存储库连接。