android - 道用例。 MVVM还是Clean Architecture反模式?

标签 android mvvm clean-architecture anti-patterns

在我们的“SearchUsecase”中,我们可以直接访问“ShowFtsDao”。
是否违反清洁架构原则?是否违反MVVM体系结构?
假设我们的目的是开发一个精心构建的标准结构,那么这段代码有什么问题吗?

class SearchUsecase @Inject constructor(
    private val searchRepository: SearchRepository,
    private val showFtsDao: ShowFtsDao,
    private val dispatchers: AppCoroutineDispatchers
) : SuspendingWorkInteractor<SearchShows.Params, List<ShowDetailed>>() {
    override suspend fun doWork(params: Params): List<ShowDetailed> {
        return withContext(dispatchers.io) {
            val remoteResults = searchRepository.search(params.query)
            if (remoteResults.isNotEmpty()) {
                remoteResults
            } else {
                when {
                    params.query.isNotBlank() -> showFtsDao.search("*$params.query*")
                    else -> emptyList()
                }
            }
        }
    }

    data class Params(val query: String)
}

最佳答案

我相信您的用例处理的逻辑超出了需要。
作为一个简单的解释,我喜欢这样考虑组件:

  • 来源:RemoteSource(网络),LocalSource(数据库),可选的MemorySource是数据库和网络api的抽象,它们进行IO线程切换和数据映射(这在大型项目中非常有用,而后端不是这样)完全由移动驱动)
  • 存储库:与源进行通信,他负责确定您从何处获取数据。我相信在您的情况下,如果RemoteSource返回空数据,那么您将从LocalSource获取数据。 (您当然可以公开不同的方法,例如get()fetch(),消费者在其中指定是否要获取最新数据,并基于该存储库调用正确的Source。
  • 用法案例:与多个存储库对话并合并它们的数据。
  • 关于android - 道用例。 MVVM还是Clean Architecture反模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65873656/

    相关文章:

    java - 如何在以下代码中创建电子邮件和密码的运行时条目?

    android - 测试仪器崩溃消息写在哪里?

    javascript - 如何内联或通过 javascript 设置 css3 动画?

    整洁架构中的 Android 特定代码

    domain-driven-design - 对应用程序结构和通信方向的疑问

    android - Gradle 依赖不与依赖模块共享

    php - GCM 显示错误请求实体太大错误 413

    c# - 使用MVVM,如何使用App.config动态生成 View

    wpf - 需要帮助优化数据网格的性能

    每种存储库方法的Android Clean Architecture UseCase?