【问题标题】:Android MVVM clean architecture with livedata带有 livedata 的 Android MVVM 干净架构
【发布时间】:2019-11-23 20:47:59
【问题描述】:

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

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

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

并且响应从DataSource to LoginFragment.一路返回

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

我的问题是理想的域不应该有任何第三方依赖。但是我的AccountUseCaselivedata 发送到viewmodel 类,因此我的域使用android livedata 依赖项,而且它没有做太多,只是为loginuser 调用repo。那么有这个用例有意义吗?

【问题讨论】:

  • 听起来你不需要AccountUseCase
  • @EpicPandaForce 你为什么这么认为?
  • 因为您似乎已经有一个 AccountRepoImpl 来做与 UseCase 正在做的事情相同的事情。但也许它实际上是您不需要的 Repo 以及 UseCase 可以做什么。
  • @EpicPandaForce 是的,目前我不需要用例,但是当我的应用程序变大时,我需要一个用例
  • medium.com/@Zhuinden/… :p 在你真正需要的时候添加东西

标签: android kotlin android-livedata android-mvvm


【解决方案1】:

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

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

我能想到的一些场景:

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

【讨论】:

  • 非常感谢。那么你认为我的结构遵循干净的架构吗?
  • 有趣的是,当我将手机配置纵向更改为横向时,正在进行的登录 API 调用停止,当再次更改配置时,我已登录
  • 不阅读您的代码就不确定那里到底发生了什么。可能在配置更改后会调用新的 API ?。
猜你喜欢
  • 2020-02-17
  • 1970-01-01
  • 2016-06-24
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 2022-01-09
  • 2019-03-28
  • 1970-01-01
相关资源
最近更新 更多