Android 带有实时数据的 MVVM 干净架构

Android MVVM clean architecture with livedata

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

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

中完成
LoginFragment -> LoginViewModel -> AccountUseCase -> AccountRepoImpl -> AccountLocalDataSource or AccountRemoteDataSource

并且从 DataSource to LoginFragment.

一路返回响应

我将 AccountUseCaseAccountRepoInterfaceAccountModel 一起视为域文件夹的一部分。 AccountRepoImpl 在 repo 文件夹中,AccountLocalDataSourceAccountRemoteDataSource 在数据源文件夹中。

我的问题是理想情况下域不应有任何第 3 方依赖项。但是我的 AccountUseCase 向视图模型 class 发出 livedata,结果我的域正在使用 android livedata 依赖项,而且它没有做太多事情,只是为 loginuser 调用 repo。那么拥有这个用例有意义吗?

关于 LiveData 依赖,我建议您在这种情况下忽略它。如果你想让它响应,你要么使用像 LiveDataRxJava 这样的库,要么有你自己的实现。没有太大区别。只是 LiveData 恰好是由一个包提供的,里面有 android 这个词。

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

我能想到的一些场景:

  • 当登录逻辑发生变化时,您只需更新遵循单一职责模式 (SRP) 的 AccountUseCase
  • 当您想在其他 ViewModel 中使用 AccountUseCase 而不是重复使用整个 LoginViewModel.
  • 如果所有逻辑都在 domain layer 中,这会使您的代码库更加一致。而不是 "hiding" 你的 ViewModel.
  • 中的一些简单逻辑