Der*_*k K 2 authentication android use-case clean-architecture
我正在使用Clean Architecture模式使用Android应用程序,并且对如何以干净的方式实现授权感到怀疑。就干净的体系结构而言,以下解决方案是否干净?
我将创建以下用例(从表示层执行):
LoginUseCase
(对于提供的登录名和密码,可通过远程服务获取api令牌并保存在本地令牌源中)LogoutUseCase
(从中清除令牌LocalTokenSource
)(LocalTokenSource
接口将存储在域层中,其实现将存储在数据层中-一种存储库)
并且为了在每次应用启动时执行令牌刷新(从用户角度来看这不是用例,对吗?),我将SessionManager
在域层中创建组件。SessionManager
将负责刷新令牌并将其保存在中LocalTokenSource
。每次活动开始时,我都会从其主持人处执行refreshToken()
注入SessionManager.
操作。您如何看待解决方案?
如果很干净,那么如何处理将令牌传递到远程服务以执行其他需要令牌的API方法?可以说我有PostsRepository
从远程服务中获取帖子数据的信息。我应该将令牌从用例传递到类似的存储库方法repo.getPosts(token)
吗?还是注入LocalTokenSource
存储库,以便它可以自己读取令牌?第二个选项不会因为LocalTokenSource
使用2层而违反了Clean Architecture规则?
您必须决定的中心问题是:您是否要对授权(以及令牌的使用)进行建模,以将其建模为业务逻辑的一部分,还是要将其视为“实现细节”。
如果您为第一个决定使用专用的用例,则将SessionManager添加到域层并将令牌传递到存储库将是一致的建模。
如果您决定稍后再登录,则登录/注销/刷新以及令牌的存在可能最好“保留在幕后”,因此应保留在框架或网关层。
两种方法都将遵循“干净体系结构”的规则(只要您不违反依赖关系规则)。
归档时间: |
|
查看次数: |
697 次 |
最近记录: |