-1

我正在尝试在我的应用程序中实现 MVP 模式。

但是,有些任务我不确定如何以正确的方式进行。
大多数示例仅涵盖基本任务和简单任务,其中每个交互者只执行一项任务(例如获取用户列表) - 但是,如果任务更复杂,我们应该如何实现它

我们应该如何处理这些任务:

  1. 一个复杂的数据任务,例如涉及 3 个 api 调用 - 获取用户 + 获取用户喜欢 + 获取用户关注者。应该在单个交互器中完成,还是分成 3 个交互器?

  2. 在从演示者转移到其交互者之前,需要将数据存储在某处的任务。
    例如,一个复杂的注册过程 - 用户输入用户名和地址,然后按继续。之后有一系列 X 弹出窗口,用户在其中填写更多数据。最终 - 用户按下注册,演示者触发其交互者。
    现在,在进行注册调用之前的整个过程中,这些注册数据应该保存在哪里?在主持人?在演讲者的专属课堂上?在..交互者??

  3. 最后的想法 - 在我看到的所有示例中,交互者与其演示者具有 1 对 1 的关系。
    如果登录演示者使用登录交互器进行...登录ofc。如果我需要在其他屏幕上进行另一个登录调用会发生什么(我知道这并不常见,但只是为了理解主要思想) - 然后我们将有另一个交互器做与前一个相同的事情。那么交互者应该有一对多的关系吗?

我很高兴听到你的意见

谢谢!

4

2 回答 2

1

回答您的问题:

  1. 我建议有一个单独的 API 层来处理您的后台任务。我建议通过 RxJava 公开每个 API 调用,并确保只有 Presenter 可以访问 API。RxJava 将完成繁重的工作,允许您在应用程序层/演示者中将请求组合在一起。
  2. Square 最近就这个和那里的解决方案做了一次演讲。您可以在此处找到它的链接。归根结底,这不是一个容易解决的问题。如果您正在寻找一个简单的解决方案,我和我的团队创建了一个名为首选项的概念。每个首选项代表存储在内存中或使用共享首选项保存到磁盘的单个数据。这是我们用来执行此操作的库的示例。该库使用 RxJava1,我们私下将其升级为 RxJava2,但您可以理解。每条数据都是一个依赖项,我们使用依赖注入在演示者/屏幕之间传递以将其获取到我们需要的地方。
  3. 无法回答这个问题。我的团队不使用交互器。正如我在 #1 中描述的那样,我们使用了一个分离的 API 层,而 RxJava 允许所有这些调用都非常灵活和可重用。如果你对你在博客中阅读的所有内容都持教条主义的态度,你会让自己发疯。我在博客中读到的很多东西在原则上并不实用。我建议使用常识,并找到适合您团队的方法。

这是 MVI(模型视图意图)的卖空。我强烈推荐它:

大约一年前,我的团队最近尝试采用 MVP。没过多久,我们就发现了一些不足之处,并且出现了与您类似的问题。经过一番搜索,我们转向了模型-视图-意图 (MVI)。它与 MVP 非常相似,但有一些关键区别使代码更易于管理,更容易在开发人员之间标准化代码,从而更容易跳转到其他人的代码中。

几个关键区别: View 不与 Presenter 对话,而是 View 发出 Presenter 订阅的事件,称为 Intents。Presenter 还通过强大的 View Model 与 View 对话。如果你把它画出来,它最终的功能与 MVVM 非常相似。您最终会得到如下所示的流程:

  1. Presenter 订阅 View 事件/意图。
  2. 视图发出事件。
  3. Presenter 接收事件、做出反应并更新模型。
  4. 正在更新的模型会触发对视图的更新
  5. 一轮又一轮。(如果你把它画出来,它最终会变成一个非常循环的事件循环)

Hannes Dorfmann 有几篇我推荐的关于 MVI 的博客文章。他提供了一些相当复杂的例子。我的团队使用 Kotlin,这对此有很大帮助。我们没有遵循 Hannes 所做的一切,但我们从他的博客文章/示例中学到了很多东西,并提炼出对我们团队非常有效的东西。

  1. http://hannesdorfmann.com/android/model-view-intent
  2. http://hannesdorfmann.com/android/mosby3-mvi-1
  3. http://hannesdorfmann.com/android/mosby3-mvi-2
  4. http://hannesdorfmann.com/android/mosby3-mvi-3
  5. http://hannesdorfmann.com/android/mosby3-mvi-4
  6. http://hannesdorfmann.com/android/mosby3-mvi-5
  7. http://hannesdorfmann.com/android/mosby3-mvi-6
于 2017-11-08T08:21:17.713 回答
0

@dor506 在我开始使用 MVP 架构之前,我有过这种困惑

我必须关注很多文章、博客和示例项目。在它们之上,这个 repo 是我学习 MVP 的蓝图

关注这个repo希望你能成为使用 MVP 架构开发 android 应用程序的专家

于 2017-11-08T07:47:03.737 回答