【问题标题】:How do I follow MVP architecture with 3rd party SDKs?如何使用 3rd 方 SDK 遵循 MVP 架构?
【发布时间】:2023-04-01 21:13:02
【问题描述】:

我看过很多展示如何在 MVP 中实现登录的项目,但找不到与 Google/Facebook 登录相关的任何内容。

登录流程与Android组件生命周期强绑定的情况下怎么办?我看到 MVP 的主要好处在于我们在 Context 之上构建了一个抽象,但是当我们需要遵循时,这个抽象会显得过于复杂,例如 Facebook 登录流程:你需要注册 FacebookCallbackCallbackManager,调用logInWithReadPermissions()(将活动/片段传递给它),将onActivityResult() 委托给callbackManager,这将触发FacebookCallback 的方法。

我的想法是创建类似的东西

interface AuthInteractor {
    void doFacebookLogin();
    void doGoogleLogin();
}

谁的实现将知道上下文并初始化GoogleApiClient。它将被注入 Presenter,但是所有这些回调(尤其是在 Facebook 的 SDK 中)会变得过于复杂。在这种情况下省略 MVP 不是更好吗?

【问题讨论】:

  • 不太确定你的问题,但我不同意接口,恕我直言,我会创建一个实现相同接口并抽象每个登录流程的特殊性的 FacebookLogin 和 GoogleLogin 类。
  • @jonathanrz 是的,我在以前的项目中也是这样做的,我将重用这段代码,两个经理可以是 AuthInteractorImpl 的成员。但我真的不喜欢这样的架构,最好在没有 MVP 的情况下写这个
  • 由于身份验证流程应该留在控制器中,我不明白为什么它会破坏 MVP 模式。
  • @jonathanrz 如果演示者不是 Activity - 它无权访问 Context,但我需要它在流程中进行多次调用。
  • Android中上下文的依赖是个大问题。为了避免这种情况,我通常会保留对我的 Application 类的静态引用,这样我就可以在代码中的任何地方获取上下文。由于您的应用程序对象将离开您的应用程序的完整生命周期,因此您不必担心静态引用会泄漏内存

标签: android mvp


【解决方案1】:

我猜你问这个问题是因为你试图将两个“想法”合并为一个单一的想法:

  1. Activity/Fragment 是 MVP 视图
  2. 第三方 SDK 依赖于 Activity(或至少是 Context)来访问您的应用程序可用的平台资源

大约两年前,我在研究 Android 中的 MVP 实现时偶然发现了类似的问题,我得出的结论是,解决所有此类问题的唯一方法是放弃 Activity/Fragment 是 MVP 视图的想法。

我在这篇文章中发布了对此问题的详细讨论:Why Activities in Android are not UI Elements

还有一个关于如何在Android中实现更好的MVP的教程:MVP and MVC in Android

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2015-06-05
    • 2016-03-29
    • 2014-08-02
    相关资源
    最近更新 更多