MVP架构 - 一些想法

时间:2017-11-08 06:54:43

标签: android mvp android-mvp

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

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

我们应该如何对待这些任务:

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

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

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

  4. 我很高兴听到你的意见

    谢谢!

2 个答案:

答案 0 :(得分:1)

您的问题的答案:

  1. 我建议使用单独的API层来处理后台任务。我建议通过RxJava公开每个API调用,并确保只有Presenter可以访问API。 RxJava可以帮助您在应用程序层/演示者中将请求组合在一起。
  2. Square最近就此问题进行了讨论。您可以找到指向它的链接here。最重要的是,这不是一个容易解决的问题。如果您正在寻找一个简单的解决方案,我的团队和我创建了一个名为首选项的概念。每个Preference表示一个存储在内存中或使用共享首选项持久保存到磁盘的单个数据。 Here is an example of a library we used to do this.这个库使用RxJava1,我们将它私有升级到RxJava2,但你可以明白这一点。每个数据都是一个依赖项,我们使用依赖注入在演示者/屏幕之间传递,以便在需要的地方使用它。
  3. 无法回答这个问题。我的团队不使用Interactors。我们在#1中描述了一个独立的API层,而RxJava允许所有这些调用非常灵活和可重用。如果你对博客中的所有内容都有教条,那么你会让自己发疯。我在博客中阅读的很多东西都是不实用的。我建议使用常识,找出适合您团队的方法。
  4. 这是MVI(模型视图意图)的卖空。我强烈推荐它:

    我的团队最近在一年前尝试采用MVP。我们花了很长时间才意识到一些缺点,并且有类似的问题。经过一番搜索后,我们转移到了Model-View-Intent(MVI)。它与MVP非常相似,但有一些关键差异使代码更易于管理,更容易在开发人员之间标准化代码,从而更容易跳入其他人的代码。

    一些主要区别:View不与Presenter交谈,而是View发出Presenter订阅的事件,称为Intents。演示者还通过强大的视图模型与视图对话。如果你把它画出来,它最终的功能与MVVM非常相似。最终得到一个如下所示的流程:

    1. Presenter订阅了View events / intents。
    2. 视图会发出事件。
    3. Presenter接收事件,作出反应并更新模型。
    4. 正在更新的模型会触发对视图的更新
    5. 它转了一圈又一圈。 (如果你把它画出来,它最终会成为一个非常循环的事件循环)
    6. 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

答案 1 :(得分:0)

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

我不得不关注很多文章,博客和示例项目。上面这些回购是我学习MVP的蓝图

按照这个repo希望你将成为开发具有MVP架构的Android应用程序的专家