Android 带有实时数据的 MVVM 干净架构
Android MVVM clean architecture with livedata
我有一个架构问题。目前我的应用程序非常简单,用户登录并获取餐厅列表,然后他可以注销。我将 kotlin 协程用于异步部分、mvvm 实时数据和 koin DI。
这是用户点击登录时我的登录流程。正则表达式验证在 LoginViewModel
-
中完成
LoginFragment -> LoginViewModel -> AccountUseCase -> AccountRepoImpl -> AccountLocalDataSource or AccountRemoteDataSource
并且从 DataSource to LoginFragment.
一路返回响应
我将 AccountUseCase
和 AccountRepoInterface
与 AccountModel
一起视为域文件夹的一部分。 AccountRepoImpl
在 repo 文件夹中,AccountLocalDataSource
和 AccountRemoteDataSource
在数据源文件夹中。
我的问题是理想情况下域不应有任何第 3 方依赖项。但是我的 AccountUseCase
向视图模型 class 发出 livedata
,结果我的域正在使用 android livedata
依赖项,而且它没有做太多事情,只是为 loginuser 调用 repo。那么拥有这个用例有意义吗?
关于 LiveData
依赖,我建议您在这种情况下忽略它。如果你想让它响应,你要么使用像 LiveData
或 RxJava
这样的库,要么有你自己的实现。没有太大区别。只是 LiveData
恰好是由一个包提供的,里面有 android
这个词。
关于用例,正如您所说,您的应用目前 很简单。该用例目前看来是多余的,因为在这种情况下逻辑很简单,但一旦应用程序变得更加复杂,它就会有所帮助。
我能想到的一些场景:
- 当登录逻辑发生变化时,您只需更新遵循单一职责模式 (SRP) 的
AccountUseCase
。
- 当您想在其他
ViewModel
中使用 AccountUseCase
而不是重复使用整个 LoginViewModel
.
- 如果所有逻辑都在
domain layer
中,这会使您的代码库更加一致。而不是 "hiding" 你的 ViewModel
. 中的一些简单逻辑
我有一个架构问题。目前我的应用程序非常简单,用户登录并获取餐厅列表,然后他可以注销。我将 kotlin 协程用于异步部分、mvvm 实时数据和 koin DI。
这是用户点击登录时我的登录流程。正则表达式验证在 LoginViewModel
-
LoginFragment -> LoginViewModel -> AccountUseCase -> AccountRepoImpl -> AccountLocalDataSource or AccountRemoteDataSource
并且从 DataSource to LoginFragment.
我将 AccountUseCase
和 AccountRepoInterface
与 AccountModel
一起视为域文件夹的一部分。 AccountRepoImpl
在 repo 文件夹中,AccountLocalDataSource
和 AccountRemoteDataSource
在数据源文件夹中。
我的问题是理想情况下域不应有任何第 3 方依赖项。但是我的 AccountUseCase
向视图模型 class 发出 livedata
,结果我的域正在使用 android livedata
依赖项,而且它没有做太多事情,只是为 loginuser 调用 repo。那么拥有这个用例有意义吗?
关于 LiveData
依赖,我建议您在这种情况下忽略它。如果你想让它响应,你要么使用像 LiveData
或 RxJava
这样的库,要么有你自己的实现。没有太大区别。只是 LiveData
恰好是由一个包提供的,里面有 android
这个词。
关于用例,正如您所说,您的应用目前 很简单。该用例目前看来是多余的,因为在这种情况下逻辑很简单,但一旦应用程序变得更加复杂,它就会有所帮助。
我能想到的一些场景:
- 当登录逻辑发生变化时,您只需更新遵循单一职责模式 (SRP) 的
AccountUseCase
。 - 当您想在其他
ViewModel
中使用AccountUseCase
而不是重复使用整个LoginViewModel
. - 如果所有逻辑都在
domain layer
中,这会使您的代码库更加一致。而不是 "hiding" 你的ViewModel
. 中的一些简单逻辑