android - 带有 livedata 的 Android MVVM 干净架构
问题描述
我有一个建筑问题。目前我的应用程序非常简单,用户登录并获取餐厅列表,然后他可以注销。我将 kotlin 协程用于异步部分、mvvm 实时数据和 koin DI。
这是用户单击登录时的登录流程。正则表达式验证在LoginViewModel
-
LoginFragment -> LoginViewModel -> AccountUseCase -> AccountRepoImpl -> AccountLocalDataSource or AccountRemoteDataSource
并且响应一直从DataSource to LoginFragment.
我认为AccountUseCase
andAccountRepoInterface
作为域文件夹的一部分以及AccountModel
. 位于AccountRepoImpl
repo 文件夹中,AccountLocalDataSource
并且AccountRemoteDataSource
位于 datasource 文件夹中。
我的问题是理想的域不应该有任何第三方依赖。但是我向 viewmodel 类AccountUseCase
发出了信号,因此我的域正在使用依赖项,而且它没有做太多事情,只是为 loginuser 调用 repo。那么有这个用例有意义吗?livedata
android livedata
解决方案
在LiveData
依赖方面,我建议你在这种情况下忽略它。如果您想使其具有反应性,您可以使用类似库LiveData
或RxJava
拥有自己的实现。没有太大区别。这LiveData
恰好是由一个android
里面有这个词的包提供的。
关于用例,正如您所说,您的应用程序目前很简单。这个用例现在似乎是多余的,因为在这种情况下逻辑很简单,但一旦应用程序变得更复杂,它就会很有帮助。
我能想到的一些场景:
- 当登录逻辑发生变化时,您只需更新
AccountUseCase
遵循单一职责模式 (SRP) 的登录逻辑。 - 当您想使用
AccountUseCase
in otherViewModel
而不是重用整个LoginViewModel
. - 如果所有逻辑都在
domain layer
. 而不是“隐藏”一些简单的逻辑在你的ViewModel
.
推荐阅读
- python - python:使用不同的分隔符时从行中提取部分
- java - 如何用 0 填充 BitSet?
- oracle - 如何在 OWB11gR2(Oracle Warehouse Builder)中应用补丁
- javascript - 如何在 AppleScript 中获取 HTML 按钮禁用状态(真或假)?
- python - python创建自定义语法
- svelte - 如何在 svelte 中禁用未使用的样式警告
- google-apps-script - 如何使用 Google Apps 脚本抓取网站的特定关键词?
- javascript - Vuejs 渲染子组件
- react-native - 每次单击输出时,如何在不重复的情况下在本机反应中显示数字 0 到 10?
- c# - 带有 ER Core 5 的 ASP.Net C# Web API 控制器 - 添加控制器错误