清洁架构和授权。正确的方法?

时间:2019-02-14 16:53:51

标签: android authentication use-case clean-architecture

我正在使用“干净架构”模式开发Android应用,并且对如何以干净的方式实现授权感到怀疑。就干净的体系结构而言,以下解决方案是否干净?

我将创建以下用例(从表示层执行):

  • LoginUseCase(用于提供的登录名和密码通过远程服务获取api令牌并保存在本地令牌源中)
  • LogoutUseCase(从LocalTokenSource清除令牌)

({LocalTokenSource接口将存储在域层中,其实现将存储在数据层中-一种存储库)

并且为了在每次应用启动时执行令牌刷新(从用户角度来看这不是用例,对吗?),我将在域层中创建SessionManager组件。 SessionManager将负责刷新令牌并将其保存在LocalTokenSource中。每次活动开始时,我都会从其演示者对注入的refreshToken()执行SessionManager.,您如何看待解决方案?

如果很干净,那么如何处理将令牌传递到远程服务以执行其他需要令牌的API方法?可以说我有PostsRepository可以从远程服务中获取帖子数据。是否应该将令牌从用例传递到类似repo.getPosts(token)的存储库方法?还是将LocalTokenSource注入存储库,以便它可以自己读取令牌?第二个选项不会违反“干净架构”规则,因为LocalTokenSource将用于2层吗?

1 个答案:

答案 0 :(得分:3)

您必须决定的中心问题是:您是否要将建模(以及令牌的使用)建模为业务逻辑的一部分,还是要将其视为“实施细节”。 / p>

如果您首先决定使用专用用例,则将SessionManager添加到域层并将令牌传递到存储库将是一致的建模。

如果您决定稍后再登录,则最好将登录/注销/刷新以及令牌的存在保留在“幕后”,因此应保留在框架或网关层。

这两种方法都将遵循Clean Architecture的规则(只要您不违反依赖关系规则)。