【发布时间】: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