首页 > 解决方案 > 带有 livedata 的 Android MVVM 干净架构

问题描述

我有一个建筑问题。目前我的应用程序非常简单,用户登录并获取餐厅列表,然后他可以注销。我将 kotlin 协程用于异步部分、mvvm 实时数据和 koin DI。

这是用户单击登录时的登录流程。正则表达式验证在LoginViewModel-

LoginFragment -> LoginViewModel -> AccountUseCase -> AccountRepoImpl -> AccountLocalDataSource or AccountRemoteDataSource

并且响应一直从DataSource to LoginFragment.

我认为AccountUseCaseandAccountRepoInterface作为域文件夹的一部分以及AccountModel. 位于AccountRepoImplrepo 文件夹中,AccountLocalDataSource并且AccountRemoteDataSource位于 datasource 文件夹中。

我的问题是理想的域不应该有任何第三方依赖。但是我向 viewmodel 类AccountUseCase发出了信号,因此我的域正在使用依赖项,而且它没有做太多事情,只是为 loginuser 调用 repo。那么有这个用例有意义吗?livedataandroid livedata

标签: androidkotlinandroid-livedataandroid-mvvm

解决方案


LiveData依赖方面,我建议你在这种情况下忽略它。如果您想使其具有反应性,您可以使用类似库LiveDataRxJava拥有自己的实现。没有太大区别。这LiveData恰好是由一个android里面有这个词的包提供的。

关于用例,正如您所说,您的应用程序目前很简单。这个用例现在似乎是多余的,因为在这种情况下逻辑很简单,但一旦应用程序变得更复杂,它就会很有帮助。

我能想到的一些场景:

  • 当登录逻辑发生变化时,您只需更新AccountUseCase遵循单一职责模式 (SRP) 的登录逻辑。
  • 当您想使用AccountUseCasein otherViewModel而不是重用整个LoginViewModel.
  • 如果所有逻辑都在domain layer. 而不是“隐藏”一些简单的逻辑在你的ViewModel.

推荐阅读