【发布时间】:2019-07-08 18:34:26
【问题描述】:
我正在开发基于 Clean Architecture 模式的 Android 应用程序,但我怀疑如何以干净的方式实现用户身份验证。就干净架构而言,以下解决方案是否干净?
我会创建如下用例(从表示层执行):
-
LoginUseCase(用于提供的登录名和密码通过远程服务获取api令牌并保存在本地令牌源中) -
LogoutUseCase(从LocalTokenSource清除令牌)
(LocalTokenSource 接口将存储在领域层,其实现在数据层 - 一种存储库)
为了在每次应用启动时执行令牌刷新(从用户的角度来看,这不是一个用例,对吧?)我会在域层创建 SessionManager 组件。 SessionManager 将负责刷新令牌并将其保存在 LocalTokenSource 中。每次活动开始时,我都会从它的演示者那里执行refreshToken() 注入SessionManager. 你如何看待解决方案?
如果它是干净的,那么如何处理将令牌传递给远程服务以执行其他需要令牌的 API 方法?假设我有 PostsRepository 从远程服务获取帖子数据。我应该将令牌从用例传递到像repo.getPosts(token) 这样的存储库方法吗?或者将LocalTokenSource 注入到存储库中,这样它就可以自己读取令牌?第二个选项会不会违反 Clean Architecture 规则,因为 LocalTokenSource 将用于 2 层?
【问题讨论】:
标签: android authentication use-case clean-architecture