我有一个架构问题。目前,我的应用程序非常简单,用户登录并获得餐厅列表,他可以注销。我将 kotlin 协程用于异步部分、mvvm live data 和 koin DI。
这是用户单击登录时的登录流程。正则表达式验证在 LoginViewModel
中完成 -
LoginFragment -> LoginViewModel -> AccountUseCase -> AccountRepoImpl -> AccountLocalDataSource or AccountRemoteDataSource
回应是从DataSource to LoginFragment.
一路走来
我认为AccountUseCase
和AccountRepoInterface
与AccountModel
一起作为域文件夹的一部分。AccountRepoImpl
位于存储库文件夹和AccountLocalDataSource
中,AccountRemoteDataSource
位于数据源文件夹中。
我的问题是理想情况下,域不应具有任何第三方依赖项。但是我的AccountUseCase
向 viewmodel 类发出livedata
,因此我的域正在使用android livedata
依赖项,而且它没有做太多事情,而只是为 loginuser 调用存储库。那么拥有这个用例有意义吗?
就LiveData
依赖关系而言,我建议您在这种情况下忽略它。如果你想让它成为反应式的,要么使用像LiveData
或RxJava
这样的库,要么有自己的实现。没有太大区别。只是LiveData
恰好由一个包含单词android
的包裹提供。
关于用例,正如您所说,您的应用程序目前很简单。用例目前似乎是多余的,因为在这种情况下逻辑很简单,但是一旦应用程序变得更加复杂,它将很有帮助。
我能想到的一些场景:
- 当登录逻辑更改时,您只需更新遵循单一责任模式 (SRP( 的
AccountUseCase
。 - 当您想在其他
ViewModel
中使用该AccountUseCase
而不是重用整个LoginViewModel
时。 - 如果所有逻辑都在
domain layer
内,这将使您的代码库更加一致。而不是将一些简单的逻辑"隐藏"在您的ViewModel
中.