Android 在干净的MVP中,谁应该处理合并的交互者?

Android 在干净的MVP中,谁应该处理合并的交互者?,android,mvp,use-case,clean-architecture,Android,Mvp,Use Case,Clean Architecture,我已经看到了MVP架构(和)的好例子。两者都只提供简单的交互器,但我想知道如何处理更复杂的用例,包括在其他用例中重复的步骤 例如,我的API需要令牌来验证任何调用。我已经创建了一个交互器来获取该令牌(GetToken)。我想获取用户的上次登录日期(GetLastLoginDate),然后获取从该日期到现在发生的更改列表(GetVersionChanges) 那些交互者应该被锁在哪里?我想把它们分开,因为它们中的一些可以在代码的其他部分重用。我想出了两个解决办法 演示者应链接所有交互者。只要用例不

我已经看到了MVP架构(和)的好例子。两者都只提供简单的交互器,但我想知道如何处理更复杂的用例,包括在其他用例中重复的步骤

例如,我的API需要令牌来验证任何调用。我已经创建了一个交互器来获取该令牌(
GetToken
)。我想获取用户的上次登录日期(
GetLastLoginDate
),然后获取从该日期到现在发生的更改列表(
GetVersionChanges

那些交互者应该被锁在哪里?我想把它们分开,因为它们中的一些可以在代码的其他部分重用。我想出了两个解决办法

  • 演示者应链接所有交互者。只要用例不复杂并且没有很多先决条件,这个解决方案就可以工作。在我看来,这不是一个合适的地方,因为它给演讲者带来了另一种责任

  • Interactor可以使用许多存储库(没有违反干净的体系结构规则)。为什么不在其他交互程序中使用
    TokenRepository
    ?因为获取令牌比仅仅到达存储库要复杂得多。重复其他interactor中的步骤不会重用现有代码


  • 这两种解决方案都有各自的缺陷,都违背了基本原则(干巴巴的、单一责任原则)。

    如果我是你,我会将获取令牌的逻辑放在一个单独的交互器(可能命名为getTokenInteractor)中,并从可能需要它的其他交互器中调用该交互器。 这样,您可以在一个交互器中选择使用令牌(并调用或不调用getTokenInteractor),也可以在一个交互器中检索令牌并处理错误。 我会对您的“getVersionChanges”用例执行相同的操作,并让交互者链接调用

    假设您有一个演示者需要显示版本更改。他将调用第一个交互者(GetVersionChangesInteractor),该交互者将首先检查他是否有令牌(通过调用getTokenInteractor),然后调用GetLastLoginDelepository检索日期,并使用该日期调用GetVersionChangesRepository,最后将结果提供给演示者

    这样,您的业务逻辑可以100%保留在您的交互者中,您的演示者可以专注于如何在屏幕上显示它


    顺便说一句,如果您的API每次调用都需要一个令牌,那么您应该将其移动到拦截器中,这样您就不必在每次调用时都处理它。

    您所追求的可能就是MVPC模式。是我很久以前写的东西(虽然代码示例非常糟糕,请原谅!)

    如果您想看一个详细的示例,我在这里写了关于这个主题的博客: