android - 如何在 Android 的 MVP 架构中的两个演示者之间共享数据?

标签 android design-patterns mvp

这是一个示例场景:

我有一个 Activity ( View )和该 View 的演示者。演示者从网络 API 中获取用户列表,并使用 List 对象将其保存在内存中。该 Activity 包含不同类型的 fragment ,以根据 User.type 显示有关用户的内容。这两个 fragment (UserType1Fragment 和 UserType2Fragment)也有各自的 Presenter。

Activity 的演示者决定接下来显示的 fragment 类型(I 或 II)。 fragment 的呈现器决定用户对象的显示方式并处理名为 killUser() 的按钮单击事件。这应该更新 Activity 演示者中的列表对象。

这就是问题所在:

fragment 呈现如何引用 Activity 呈现器中的数据?演示者不应直接相互交流。也许我应该将列表抽象成存储库/交互器?列表将如何在演示者之间共享?

最佳答案

所以我最终实现了@Jahnold 推荐的东西。 (我将在提供的链接中张贴图表以提供想法 stackoverflow.com/a/41966497/568898 )

Hannes Dorfmann(创建/管理着名的 Mosby MVP 库的人:Github link)也向我指出了这个方向。

enter image description here

实现

我有一个主要 Activity 的演示者和可在该 Activity 中使用的多个 fragment 。每个 fragment 都有自己的演示者。然后我使用一个存储库(搜索存储库模式),它基本上存储模型和业务逻辑。对于我的用例,我将此存储库保持为单例。存储库以三种形式提供数据,来自在线 api、sqllite 数据库或存储在内存中的缓存(基本上是项目的数组列表)。我在这个存储库中也有一些 currentitem int 索引和东西,它们会根据当前状态进行更新。

因此,数据、状态和业务逻辑都存储在这个共享存储库中。主持人和观点都很愚蠢。我在演示者中没有太多业务逻辑(特定于应用程序的逻辑)。它们仅具有与数据显示方式相关的逻辑(查看特定逻辑)并在逻辑上对其进行预处理。

示例

当用户单击子 fragment 中的按钮时,每当 fragment 和 Activity 需要(通过演示者)相互交谈时, fragment 会要求其演示者处理点击,演示者更新存储库的 currentItemSelected 数据(或其他内容)和要求 fragment 向 Activity 实现的接口(interface)监听器触发事件​​(比如 onbuttonclick)。当 Activity 获得事件时,它会要求它自己的演示者处理它,然后 Activity 演示者会在存储库中查找更新以获取新的 currentItemSelected。

额外信息(高级版):

您还可以遵循 Clean 架构,这是一种更高级版本的 MVP 架构。 MVP 只处理 View 的架构,而 Clean 架构还处理业务逻辑和数据架构,MVP 只是 clean arch 的一小部分,用于处理 View 。使用它,您可以将我的案例中的大型存储库分解为处理特定业务逻辑用例的更多用例(或交互器),而存储库仅提供数据。所以逻辑流现在是 View -->演示者-->交互器--> repo 和返回。

关于android - 如何在 Android 的 MVP 架构中的两个演示者之间共享数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42928243/

相关文章:

Android MVP解释

java - 循环通过 JSONObject 创建数组 Java

android - 无法推送到 Github;错误 403

c# - 如何正确编写桌面应用程序?

model-view-controller - MVC WITH Web 应用程序的实际模式是什么?

android - MVVM (Android) 中的文件结构

java - 如何通过 Onclicklistener 移动到 json 数组中的下一个 json 项目

android - 在android中 react native 句柄主页按钮按下?

node.js - 如何将同步风格的代码转换为异步代码?

android - 在 Android MVP 中将 BroadcastReceiver 放在哪里?