【问题标题】:Questions on MVP Pattern for Android appsAndroid 应用程序的 MVP 模式问题
【发布时间】:2017-01-13 10:56:27
【问题描述】:

我多年来一直在开发 Android 应用程序。最近我在我的应用程序中使用了 MVP 架构,并且在阅读了很多内容并使用了这个Android10 github repo。

但是对于我正在寻找的这个 MVP 架构,我有几个问题。请帮助我更好地理解这些。

1)所以我有三个模块应用程序,域,数据。哪个模块演示者会去。在某些应用程序中,它们在域中具有它,但我看到其他一些库在演示文稿或应用程序模块中具有它,例如https://github.com/android10/Android-CleanArchitecture

2 ) 演示者能否拥有与 Android 相关的内容,如 Intents、Contexts、SharedPrefs 等?我认为这不应该发生。

3) 数据模块是否可以与应用程序模块通信,反之亦然或者应用程序模块应该与域模块通信,而域模块则执行数据模块上的内容

4 ) 我如何使用 MVP 架构进行 Facebook 等社交登录...有什么想法或链接可以解释吗?我已经通过以下方式做到了:

活动:onFBButtonClick() --> presenter.onButtonClick() --> FacebookLoginManager.registerCallback

在此之后,我直接在onActivityResult(int requestcode, int resultcode, Intent intent) 上收到有关我的活动的回调。现在根据 fb sdk 教程我必须打电话给FbCallbackManager.onActivityResult(with all the params)。但是我不能在演示者中传递这些信息,因为演示者不应该知道意图(特定于平台)的事情。我现在怎么打电话给FbcallbackManager.onActivity()

【问题讨论】:

  • 2) Intent 确实是 Android 框架的东西 - 必须在 MVP 的 V 部分。上下文 - 应该可以在需要时通过依赖注入来实现,我在 Presenter 中避免使用它。 SharedPrefs 相同——它们与特定的 UseCase(或 Interactor,无论你如何命名)严格相关。 UseCase 使用存储库来存储数据,而 SharedPrefs 可以是这样的可注入存储库。检查 donnfelker 的回复:reddit.com/r/androiddev/comments/35vgw7/… 就个人而言,我不会将 UseCase 用于简单的 Presenter。直接使用存储库。
  • @Przemo 我从 v 部分理解的是 View ...Activity ,fragments 。我不认为我们可以将 Intents 实现为 View 。无论如何感谢您的回复。
  • 是的,V 是 Android 框架部分(Activity、Views、Fragments。我的意思是与意图相关的东西,比如启动新的 Activity、IntentFilters、BroadcastReceivers、Services 等应该在 View 部分进行管理。实际上不是视图,它是控制器。但在 MVP 中,视图实际上是视图 + 简单的控制器,其中包含我刚才所说的内容,单击侦听器等。
  • 1) 不要将 MVP 概念与清洁架构概念混为一谈。所有 MVP 都应该放在 app 模块中。域、数据、网络等是其他不同的层。
  • @Przemo 和 adalPari :是的,我同意,但是 3) 和 4) 问题呢

标签: android facebook-android-sdk android-mvp


【解决方案1】:

在 Android 中实现 MVP 的方法有很多。

我见过的大多数方法都将 Activity/Fragment 指定为 MVP 视图。这最初看起来很自然,但是当您尝试将此方案应用于非平凡的应用程序时会引发太多问题和疑问。

在我研究了许多 MVP 方法(包括您链接的那些)后,我得出结论,Activity 和 Fragment 都不应该是 MVC 视图。

此声明背后的详细原因总结如下:Why Activities are not UI Elements

沿着这条视线,我提出了另一种 MVP 用于 android 应用程序的实现:MVP and MVC Architectures in Android

至于你的问题:

  1. 演示者是“屏幕”的一部分
  2. 取决于您选择的 MVP 方法。我个人认为presenters是Activity和Fragment,因此他们可以依赖Android的组件。
  3. 我认为只有那个 git repo 的作者才能回答这个问题。
  4. 如果您采用 Activity/Fragment 作为演示者的心态,您将立即明白如何在不污染 MVP 视图的情况下做到这一点。

另外,关于FB整合,请看我的回答here

【讨论】:

  • 非常感谢您的回复。如果有问题,我将浏览链接并返回问题
猜你喜欢
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2023-03-04
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多